開いているところから読んos.pipe()
で、読んでいる時点で空かどうかを確認しようとしています。問題は、呼び出すread()
と、実際に何かを読み取ることができるまでプログラムがブロックされることですが、私が行っているテストが成功した場合は、何もありません。
タイムアウトで使用できることはわかってselect.select()
いますが、問題に対する別の解決策があるかどうかを知りたいと思いました。
あなたはこれを試すかもしれません。
import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK)
これthePipe.read()
でノンブロッキングになるはずです。
pipe(7)のマニュアルページから:
プロセスが空のパイプから読み取ろうとすると、データが利用可能になるまで read(2) がブロックされます。(...) fcntl(2)
F_SETFL
操作を使用してO_NONBLOCK
オープン ファイル ステータス フラグを有効にすることにより、ノンブロッキング I/O が可能になります。