在Linux内核中,我可以使用以下命令将文件发送到打印机
cat file.txt > /dev/usb/lp0
据我所知,这将file.txt中的内容redirect到打印位置。 我尝试使用以下命令
>>os.system('cat file.txt > /dev/usb/lp0')
我认为这个命令会达到同样的效果,但它给了我一个“权限被拒绝”的错误。 在命令行中,我会在连接之前运行以下命令。
sudo chown root:lpadmin /dev/usb/lp0
有一个更好的方法吗?
虽然没有理由你的代码不应该工作,这可能不是你想这样做的方式。 如果你只是想运行shell命令, bash
比python
好得多。 另一方面,如果你想使用Python,有比shell重定向更好的方法来复制文件。
将一个文件复制到另一个文件最简单的方法是使用shutil
:
shutil.copyfile('file.txt', '/dev/usb/lp0')
(当然,如果你有权限问题,防止重定向工作,你将有相同的复制权限问题。)
你需要一个从键盘读取输入的程序,当它得到一个特定的输入时,它打印一个特定的文件。 这很容易:
import shutil while True: line = raw_input() # or just input() if you're on Python 3.x if line == 'certain input': shutil.copyfile('file.txt', '/dev/usb/lp0')
很显然,一个真正的程序会更复杂一点 – 它会用不同的命令做不同的事情,并且可能需要参数来告诉它打印哪个文件,等等。 如果你想这样做, cmd
模块是一个很大的帮助。
请记住,在UNIX中 – 一切都是文件。 即使设备。
所以,你可以使用基本的(或其他任何东西,如shutil.copyfile)文件方法( http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files )。
在你的情况下,代码可能 ( 只是一种方式 )是这样的:
# Read file.txt with open('file.txt', 'r') as content_file: content = content_file.read() with open('/dev/usb/lp0', 'w') as target_device: target_device.write(content)
PS请不要使用system()调用(或类似的)来解决你的问题。