web-dev-qa-db-ja.com

CUPS-印刷が成功したかどうかを確認します(pythonまたはシステム内)

編集: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に接続されたレシートプリンターです。

カップのログファイルを監視して印刷が成功するかどうかを検討しましたが、それは悪い方法のようです。

解決策を見つけるために他にどこに行けばいいのかわからないので、誰かが考えを持っているなら、それを共有してください。

2
Jeff H.

GetJobsを使用して、ジョブがプリンターに送信されたかどうかを確認しています。

printid = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
while conn.getJobs().get(printid, None) is not None:
    time.sleep(1)
3
st0ne

あなたはまで待つことができます

conn.getJobAttributes(printer_returns)["job-state"]

9に等しい(IPP_JOB_COMPLETED)

2
gpothier

ドキュメントを送信した後、cupsLastErrorStringを確認してください。それがnullの場合、あなたは良いはずです。また、ほとんどの関数は整数を返すため、失敗したかどうかを通知する必要があります。

ここにあります

1
Matthew Daiter

cupstry / except関数はIPPエラーコードを返すため、pycupsで同等のものは IPPErrorクラスcupsLastError*サンプルコードに注意)だと思います。

サブプロセスのステータスコードのチェックも機能するはずですが、pycupsでコードが直接提供される場合は、不要なオーバーヘッドのようです。

0
jefflunt

これが私がやっとやったことです。 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"
0
Jeff H.