修正する

修正する

マグプリンタに用紙がないかコマンドのみを使用して確認する方法(GUIなし)

編集:Pythonを使用してこれを確認できますか?

編集2:別のプリンタ(EPSON TM-m30)で試してみました。用紙なしで印刷しようとすると、「処理中」で停止します。

printer-state = processing
printer-state-message = Rendering completed
printer-state-reasons = none

しかし、まだ論文に関する情報を得ることはできません。

役に立つかどうかわからない。プリンタのプロパティを読み取るいくつかのPythonコードでjsonファイルを作成しました。https://pastebin.com/u97U9TnQ

修正する

用紙なしセンサー付きの別のプリンター(Star Micronics TUP542)を購入しました。用紙端センサーただし、センサーの使用方法に関するマニュアルが見つかりません(センサーがプリンターに接続されています)。カップにはいくつの命令がありますか?それとも別のツールを使用する必要がありますか?

Pythonを使用して属性を取得しようとしましたが、結果は次のようになります(json)。https://pastebin.com/Z3Tiz5g9

さて、プリンタの状態3紙があるかどうかにかかわらず常に。プリンタに用紙が落ちた場合は変更する必要がありますか?私の考えではプリンタの状態の理由紙がなくなったことについて話すべきですが、いつもそういうことがあります。['none']

アップデート2

たぶんESC / POSコマンドを試してみてください。ここ)。 157ページでコードが見つかりました。状態移行

n = 1、49:用紙検出器の状態を送信する

n = 1, 49しかし、それが文字列なのか、10進数なのか、16進数なのか、何を意味するのかはわかりません。 1と49の間にカンマがあるのはなぜですか?

私は次のPythonコードを試してみました。

command = [0x1D, 0x72, 1]
dest="/dev/usb/lp1"

with open(dest,"wb") as file:
    file.write(bytearray(command))

with open(dest,"rb") as file:
    data = file.read() # hangs
    print(data)

ただし、読み取り機能は中断され、決して返されません。

[0x1D, 0x72, 49]PS:また、別の値(、、、[0x1D, 0x72, 1, 49])を試しましたが、[0x1D, 0x72, 1, 0x49]成功しませんでした。

ところでいざ使ってみるとsudo cat /dev/usb/lp1###がたくさん印刷されますね。

catの後にhexdumpを使用すると、次の繰り返しシーケンスが表示されます。23 06 00 00 00 00 00 00 00

答え1

見たことがありますか?パラメータ統計

たとえば、プリンタのリストを取得します。

~$ lpstat -s

device for Canon_MX920_series: dnssd://Canon%20MX920%20series._ipp._tcp.local/?uuid=00000000-0000-1000-8000-xxxxxxxxxxxx

次に、問題の印刷物を照会します。

~$ lpstat -p "Canon_MX920_series"

printer Canon_MX920_series is idle.  enabled since Tue 18 Jan 2022 10:49:40 AM CST
scheduler is running

答え2

あなたはそれを使用することができますサブプロセスモジュールの使い方Python走るパラメータ統計コマンドを実行し、出力を解析してプリンタの状態を確認します。

これを行う方法の例は次のとおりです。

import subprocess

def is_printer_out_of_paper(printer_name):
    # Run the lpstat command to get the printer's status
    output = subprocess.run(["lpstat", "-p", printer_name, "-l"], capture_output=True).stdout.decode()

    # Check if the output contains the "out of paper" message
    return "out of paper" in output

# Example usage
if is_printer_out_of_paper("My Printer"):
    print("Printer is out of paper")
else:
    print("Printer has paper")

この例では私のプリンタプリンタの名前です。パラメータ統計コマンドは、プリンタの状態を取得するために使用されます。これ-血オプションはプリンタ名を指定し、-エルオプションを使用すると、lpstatコマンドはプリンタの状態を長い形式で一覧表示します。 lpstat コマンドの出力は、次のコマンドを使用してキャプチャされました。キャプチャ出力オプション次に、次のように文字列にデコードします。stdout.デコード()方法。次に、その文字列内で検索します。「用紙なし」メッセージプリンタに用紙がないことを確認してください。

関連情報