3

有没有办法将输出发送到打印机而不是 Python 中的屏幕?或者是否有可以从 python 中调用的服务例程来打印文件?也许有一个我可以导入的模块允许我这样做?

4

3 回答 3

5

大多数平台(包括 Windows)都有表示打印机的特殊文件对象,您只需将文本写入文件即可打印文本。

在 Windows 上,特殊文件对象具有 、 、 等名称LPT1:LPT2:COM1:需要知道您的打印机连接到哪一台(或以某种方式询问用户)。

您的打印机可能没有连接到任何此类特殊文件,在这种情况下,您需要启动控制面板并正确配置它。(对于远程打印机,这甚至可能需要设置“虚拟端口”。)

无论如何,写入LPT1:COM1:与写入任何其他文件完全相同。例如:

with open('LPT1:', 'w') as lpt:
    lpt.write(mytext)

或者:

lpt = open('LPT1:', 'w')
print >>lpt, mytext
print >>lpt, moretext
close(lpt)

等等。

如果您已经在文件中打印了要打印的文本,则可以这样打印:

with open(path, 'r') as f, open('LPT1:', 'w') as lpt:
    while True:
        buf = f.read()
        if not buf: break
        lpt.write(buf)

或者,更简单(未经测试,因为我这里没有 Windows 框),这应该可以工作:

import shutil
with open(path, 'r') as f, open('LPT1:', 'w') as lpt:
    shutil.copyfileobj(f, lpt)

有可能shutil.copyfile(path, 'LPT1:')只是copyfileobj.

于 2012-10-25T01:02:44.057 回答
1

Python 不会(除非您使用图形库)将内容发送到“屏幕”。它写入 stdout 和 stderr,就 Python 而言,它们只是看起来像文件的东西。

让 python 将这些流指向其他任何看起来像文件的东西很简单;例如,请参阅将标准输出重定向到 Python 中的文件?

在 unix 系统上,有一些类似文件的设备恰好是打印机 (/dev/lp*);在 Windows 上,LPT1 具有类似的目的。

无论操作系统如何,您都必须确保 LPT1 或 /dev/lp* 实际上以某种方式连接到打印机。

于 2012-10-25T00:54:57.753 回答
1

如果您使用的是 linux,如果您已设置打印机并将其设置为默认设置,则以下操作有效。

from subprocess import Popen
from cStringIO import StringIO

# place the output in a file like object
sio = StringIO(output_string)

# call the system's lpr command
p = Popen(["lpr"], stdin=sio, shell=True)
output = p.communicate()[0]
于 2012-10-25T03:57:50.000 回答