在Python中使用cat命令进行打印

在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命令, bashpython好得多。 另一方面,如果你想使用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()调用(或类似的)来解决你的问题。