CUPS - 印刷が成功したことを確認してください(Pythonまたはシステム上)。

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

すべてのprint_returnsには、印刷ジョブID(208、209、...、n)が割り当てられているようです。これは、プリンタが接続されているかどうかに関係なく発生するため、確認を信頼できません。

この場合、ターゲットプリンタは、シリアル - > USBケーブルを介してRaspbianを実行しているRaspberry Piに接続されたレシートプリンタです。

印刷を成功させるためにカップログファイルを監視することを検討しましたが、これは間違ったアプローチのようです。

他の場所で解決策を見つけることができるかもしれません。誰でもアイデアがあれば共有してください。

答え1

getJobsを使用して、ジョブがプリンタに送信されたことを確認しています。

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

答え2

待ってもいい

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

9に等しい(IPP_JOB_COMPLETED)

答え3

文書を送信して空であることをcupsLastErrorString確認してください。また、ほとんどの関数は整数を返すため、失敗したかどうかを知らせる必要があります。

ここで発見

答え4

私はpycupsに対応することが次のようになると思います。IPPエラークラスtry / except(サンプルコードを参照)cupsLastError*の関数がcupsIPPエラーコードを返すためです。

子プロセスのステータスコードを確認することも機能しますが、pycupsコードを直接提供する場合は不要なオーバーヘッドのように見えます。

関連情報