編集:私の主な質問は、サブプロセスの標準出力をプロセスの標準入力に非排他的にパイプする方法があるかどうかです。キーボードがまだ機能するように非排他的に。どちらも raw_input プロンプトに入る必要があります。
コンテキスト: QR コードでチケットを購入した人がイベントに参加できるようにする Python プログラムを作成しています。プログラムの主要部分は、ゲストの名前、電子メール アドレス、または QR コードに埋め込まれた一意のハッシュを csv で検索するループ上の raw_input() です。zbarcam を使用して一意のハッシュをスキャンしようとしています。これはほとんど機能します:
from subprocess import Popen, PIPE
p = Popen(["/cygdrive/c/Program Files (x86)/ZBar/bin/zbarcam", "--raw"], stdout=PIPE)
つまり、QR コードがスキャンされ、プロンプトでチケット ハッシュがポップアップ表示されるので、Enter キーを押して検索することができます。問題は、zbarcam が改行を追加することです。Enter キーを押すと、改行が検索され、csv 内のすべてが返されます。zbarcam の出力が stdout (raw_input に入る) にパイプされた後、改行を削除する方法が見つかりません。考えてみれば、キーボードを使用してバックスペースや改行を削除することさえできません。その方法を知っていますか?私は以前にそのようなことをしたことがあります。通常は、余分な改行をコピーして貼り付けます。
上記の行の後に次の行を追加しました: sys.stdin = p.stdout QR コードの改行が「入力」として解釈され、検索プロセスが開始されましたが、検索語を入力する能力が奪われました。これらの両方に stdin をルーティングする方法はありますか?
キーボードと zbarcam からユーザー入力を取得できる他の方法はありますか?
前もって感謝します!首尾一貫しているといいのですが、長い一日でした。
編集:誰かがこの深くハッキングされたコードで頭を打ちたいと思っているなら、彼らはここで見ることができますhttps://github.com/rtwolf/qr-event-entry/blob/master/pulp_entry.py