編集:pythonとpycupsを使用していることを明確にするのを忘れました。コードはpythonですが、それを考えるべきではありませんでした十分でした。
カップのドキュメントを数回調べましたが、これを行うための方法が見つかりませんでした。キャプチャできる正常な印刷で返されるメッセージはありますか?
たとえば、このコードでは次のようになります。
import os
import cups
conn = cups.Connection()
f = open('testreceipt.txt', 'w')
f.write('something')
f.close()
printer_returns = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
print printer_returns
Printer_returnsに割り当てられるのは、印刷ジョブID(208,209、...、n)だけのようです。これは、プリンタが接続されているかどうかに関係なく発生するため、確認のために信頼することはできません。
この場合、ターゲットプリンターは、シリアル-> usbケーブルでraspbianを実行しているRaspberryPiに接続されたレシートプリンターです。
カップのログファイルを監視して印刷が成功するかどうかを検討しましたが、それは悪い方法のようです。
解決策を見つけるために他にどこに行けばいいのかわからないので、誰かが考えを持っているなら、それを共有してください。
GetJobsを使用して、ジョブがプリンターに送信されたかどうかを確認しています。
printid = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
while conn.getJobs().get(printid, None) is not None:
time.sleep(1)
あなたはまで待つことができます
conn.getJobAttributes(printer_returns)["job-state"]
9に等しい(IPP_JOB_COMPLETED)
ドキュメントを送信した後、cupsLastErrorString
を確認してください。それがnullの場合、あなたは良いはずです。また、ほとんどの関数は整数を返すため、失敗したかどうかを通知する必要があります。
cups
のtry / except
関数はIPPエラーコードを返すため、pycupsで同等のものは IPPErrorクラス (cupsLastError*
サンプルコードに注意)だと思います。
サブプロセスのステータスコードのチェックも機能するはずですが、pycups
でコードが直接提供される場合は、不要なオーバーヘッドのようです。
これが私がやっとやったことです。 printFile()関数は、cupsが使用する印刷IDを返しますが、コマンドラインから現在の印刷キューにはlpstatを介してアクセスできます。少し面倒だと思いますが、今の私のニーズには十分です。皆さんの助けに感謝します、皆さんは私を適切な方向に動かしました。
20 printid = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
21
22 stop = 0
23 TIMEOUT = 60
24
25 while str(subprocess.check_output(["lpstat"])).find(str(printid)) > 0 and stop < TIMEOUT:
26 stop+= 1
27 time.sleep(1)
28 if stop < TIMEOUT:
29 print "PRINT SUCCESS"
30 else:
31 print "PRINT FAILURE"