2016-10-20 8 views
0

私はLinux/Pythonプログラミングのかなり新しいです。私はこれについてのグーグルを試みたが、有用な何かを見つけることができなかった。長時間実行するプロセスをパイプする

私は、シリアルポートから行を読み込み、読み込んだものをstdoutに出力する簡単なスクリプトを書いています。ここでは、関連するコードは次のとおりです。

ser = serial.Serial(args.port) 
while True: 
    print(ser.readline()) 

は、私は、スクリプトを書きました(これはテスト目的のためだけである)行が標準出力に標準入力から読み込むエコーいます。

while True: 
    print(args.prefix + input()) 

私はpython3を使用しており、スクリプトの名前はそれぞれserial.pyとecho.pyです。

私がしたいのは、serialの出力をechoの入力にパイプすることです(エコーは後でデータベースに書き込むスクリプトに置き換えられます)。それらは無期限に実行されます。

は、私が個別に両方のスクリプトを試してみましたが、彼らが正常に動作しますが、何も印刷されません取得したときにIパイプの両方のコマンド:

[email protected]:~$ ./echo.py --prefix AAA | ./echo.py --prefix BBB 
hi! 
BBBAAAhi! 

何午前:

./serial.py --port /dev/ttyACM0 | ./echo.py 

それは作業時に自分自身へのIパイプエコーを行います私は間違っている?

ありがとうございました。

敬具

+1

ここに根本的な仮定があります適切な\ n終了文字列がシリアルポートを経由します。そのような仮定は成り立つか? [readline]にタイムアウトを指定することで確認できます。[here](http://pyserial.readthedocs.io/en/latest/shortintro.html#readline) – Pynchia

+2

'./serial.py | od -c'を実行して、送信されている実際の文字コードを確認します。 '\ n'または' \ r'で終わるかどうかを確認してください。 – Barmar

+0

他の誰かがシリアルポートから入ってくる*コンテンツを使わずに問題を見るために使用できる再生器を構築できますか? (そうでない場合は、あなたのタイトルが意味するように、「長時間実行されるプロセスを配管する」という一般的な問題ではないことをはっきりと示しています)。 –

答えて

0

これは、バッファstdoutに関連した問題である可能性があります。ドキュメントで述べたようにバッファリングされていないことをstdoutとstderrを強制するのpython3インタープリタの「-u」フラグを使用してserial.pyを実行しよう:

-u  Force the binary I/O layers of stdout and stderr to be 
      unbuffered. stdin is always buffered. The text I/O layer will 
      still be line-buffered. 
関連する問題