在Python中使用cat命令打印

6 投票
3 回答
63926 浏览
提问于 2025-04-17 17:39

在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 个回答

0

在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')
0

记住,在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()调用(或类似的方法)来解决你的问题。

2

虽然你的代码应该是可以工作的,但这可能不是你想要的做法。如果你只是想运行一些命令,使用 bashpython 要好得多。另一方面,如果你想用 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 模块会非常有帮助。

撰写回答