你可以从python打印文件吗?

时间:2012-10-25 00:31:56

标签: python

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

3 个答案:

答案 0 :(得分: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更安全。 / p>

答案 1 :(得分:1)

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

让python将这些流引导到任何看起来像文件的东西,这很简单;例如,请参阅Redirect stdout to a file in Python?

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

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

答案 2 :(得分: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]