スキャナー自体からの入力をすべてキャプチャするバーコード スキャナー オブジェクトを設定しようとしています。バーコード スキャナは標準入力 (stdin) として認識されるため、バーコードをスキャンするたびに標準入力テキストが取得されます。また、別の標準入力であるキーボードがシステムに接続されます。バーコード スキャン入力とキーボード入力を区別するために、バーコード情報にプレフィックスを使用します。つまり、バーコードの長さが合計 16 文字になる場合、最初の 4 文字は、次の 12 文字がバーコード入力であることを示す所定の文字列/キーになります。これは私が読んだものからかなり標準的です。
これまでに見たほとんどの例では、GUI アプリケーションで文字入力イベントをキャプチャすることにより、バーコード入力を認識します。次に、このイベント コールバック メソッドはバッファを作成して 4 文字のプレフィックスをチェックし、必要に応じてバーコード入力をリダイレクトします。また、イベント コールバック メソッドは、バーコードに関連しない文字入力イベントをすべてスキップし、通常の標準入力 (テキスト ボックスなどへの入力) と同じように GUI と対話できるようにします。
GUIアプリケーションを使用しないことを除いて、これと同じことをしたいです。バーコード スキャナー オブジェクトを GUI アプリケーションから独立させたいです。理想的には、バーコード スキャナー オブジェクト内に、文字が入力されるたびに stdin が呼び出すコールバック メソッドが必要です。そこから、4 文字のプレフィックスをチェックしてバーコード入力を取得し、バーコード入力以外の文字を渡します。つまり、stdin がバーコード スキャナーのコールバック メソッドをパイプ処理してから、バーコード スキャナーのコールバック メソッドが非バーコード文字を何も起こらなかったかのように標準入力としてパイプアウトできるようにしたいと考えています (標準入力のままです)。それはテキストボックスか何かに行きます)。
これは、標準入力を常に監視するwhileループなしで可能ですか? 標準入力を監視する while ループがあったとしても、文字がバーコード入力でない場合、文字を標準入力として戻すにはどうすればよいでしょうか? pyusb を使用してバーコード スキャナーの USB インターフェイスを引き継ぐことを検討しましたが、これにはハードウェアと対話するためのルート権限が必要です (私のプロジェクトのオプションではありません)。どんな助けでも大歓迎です。私はまだこれの例を見つけることができませんでした。
編集: このプロジェクトは、CentOS または Linux のいくつかのフレーバーで実行されます。