1

スキャナー自体からの入力をすべてキャプチャするバーコード スキャナー オブジェクトを設定しようとしています。バーコード スキャナは標準入力 (stdin) として認識されるため、バーコードをスキャンするたびに標準入力テキストが取得されます。また、別の標準入力であるキーボードがシステムに接続されます。バーコード スキャン入力とキーボード入力を区別するために、バーコード情報にプレフィックスを使用します。つまり、バーコードの長さが合計 16 文字になる場合、最初の 4 文字は、次の 12 文字がバーコード入力であることを示す所定の文字列/キーになります。これは私が読んだものからかなり標準的です。

これまでに見たほとんどの例では、GUI アプリケーションで文字入力イベントをキャプチャすることにより、バーコード入力を認識します。次に、このイベント コールバック メソッドはバッファを作成して 4 文字のプレフィックスをチェックし、必要に応じてバーコード入力をリダイレクトします。また、イベント コールバック メソッドは、バーコードに関連しない文字入力イベントをすべてスキップし、通常の標準入力 (テキスト ボックスなどへの入力) と同じように GUI と対話できるようにします。

GUIアプリケーションを使用しないことを除いて、これと同じことをしたいです。バーコード スキャナー オブジェクトを GUI アプリケーションから独立させたいです。理想的には、バーコード スキャナー オブジェクト内に、文字が入力されるたびに stdin が呼び出すコールバック メソッドが必要です。そこから、4 文字のプレフィックスをチェックしてバーコード入力を取得し、バーコード入力以外の文字を渡します。つまり、stdin がバーコード スキャナーのコールバック メソッドをパイプ処理してから、バーコード スキャナーのコールバック メソッドが非バーコード文字を何も起こらなかったかのように標準入力としてパイプアウトできるようにしたいと考えています (標準入力のままです)。それはテキストボックスか何かに行きます)。

これは、標準入力を常に監視するwhileループなしで可能ですか? 標準入力を監視する while ループがあったとしても、文字がバーコード入力でない場合、文字を標準入力として戻すにはどうすればよいでしょうか? pyusb を使用してバーコード スキャナーの USB インターフェイスを引き継ぐことを検討しましたが、これにはハードウェアと対話するためのルート権限が必要です (私のプロジェクトのオプションではありません)。どんな助けでも大歓迎です。私はまだこれの例を見つけることができませんでした。

編集: このプロジェクトは、CentOS または Linux のいくつかのフレーバーで実行されます。

4

1 に答える 1

1

Unix で標準入力をインターセプトする通常の方法は、パイプと複数のプロセスです。マルチプロセス アプリケーションの場合、1 つのプロセスが「生の」標準入力を受け取り、バーコード入力をキャプチャし、残りを標準出力に渡すことができます。その出力は、バーコード以外のデータのみを受け取る UI プロセスの標準入力になります。これを最初にセットアップするには、パイプをセットアップし、他の 2 つのプロセスを開始して終了する単一の起動プロセスを用意します。

これらの概念に慣れていない場合は、長くて興味深い学習プロセスが待っています :-)

これはすべて、X11イベントを介してではなく、標準入力を介して「キーボード」データを実際に受け取っていることを前提としています。X11 (または GTK など) 内で開発している場合、私が説明したことはほぼ確実に機能しません。

于 2012-11-15T20:37:50.717 に答える