在Python中使用cat命令打印
在Linux内核中,我可以使用以下命令将文件发送到打印机
cat file.txt > /dev/usb/lp0
根据我的理解,这个命令是把file.txt里的内容重定向到打印机的位置。我尝试使用了以下命令
>>os.system('cat file.txt > /dev/usb/lp0')
我以为这个命令也能达到同样的效果,但它给了我一个“权限被拒绝”的错误。在命令行中,我会在连接之前运行以下命令。
sudo chown root:lpadmin /dev/usb/lp0
有没有更好的方法来做到这一点呢?
3 个回答
在Windows操作系统中没有cat
这个命令,你应该用type
来代替cat
。
(**如果你想在Windows上运行cat
命令,可以查看这个链接: https://stackoverflow.com/a/71998867/2723298)
import os
os.system('type a.txt > copy.txt')
..或者如果你的操作系统是Linux,但cat
命令还是不管用,这里有其他方法可以复制文件..可以用grep:
import os
os.system('grep "" a.txt > b.txt')
*' '
是很重要的哦!
用sed复制文件:
os.system('sed "" a.txt > sed.txt')
用awk复制文件:
os.system('awk "{print $0}" a.txt > awk.txt')
记住,在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)
附言:请不要使用system()调用(或类似的方法)来解决你的问题。
虽然你的代码应该是可以工作的,但这可能不是你想要的做法。如果你只是想运行一些命令,使用 bash
比 python
要好得多。另一方面,如果你想用 Python,有更好的方法来复制文件,而不是使用命令行重定向。
复制一个文件到另一个文件的最简单方法是使用 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
模块会非常有帮助。