Pythonの画面の代わりにプリンターに出力を送信する方法はありますか?または、Python内から呼び出してファイルを印刷できるサービスルーチンはありますか?インポートできるモジュールがあり、これを実行できるのでしょうか。
3 に答える
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
。
Pythonは(グラフィカルライブラリを使用している場合を除いて)「画面」にデータを送信しません。stdoutとstderrに書き込みます。これらは、Pythonに関する限り、ファイルのように見えるものです。
Pythonがそれらのストリームをファイルのように見える他のものに転送するのは簡単です。たとえば、「stdoutをPythonのファイルにリダイレクトしますか? 」を参照してください。
UNIXシステムには、たまたまプリンター(/ dev / lp *)であるファイルのようなデバイスがあります。Windowsでは、LPT1は同様の目的を果たします。
OSに関係なく、LPT1または/ dev /lp*が実際に何らかの方法でプリンタに接続されていることを確認する必要があります。
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]