ブロックされることなくos.pipe()から読み取る方法?
質問
私はそれが読書の瞬間に空だかどうかを確認するために、オープンos.pipe()
から読み取るしようとしています。問題はread()
を呼び出すと、実際に私がやっているテストが成功した場合、いずれも存在しないだろうがそこに読むために何かがあるまでそこにブロックするプログラムを引き起こすことがあります。
私は、しかし、私はこの問題に対する別の解決策があるかどうかを知りたいと思った私は、タイムアウトでselect.select()
を使用することができます知っています。
解決
あなたはこれを試してみてください。
import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK)
このthePipe.read()
では、ノンブロッキングでなければなりません。
からパイプ(7)のmanページ:
は、プロセスから読み取ろうとした場合 空のパイプ、次に読み出す(2)ブロックします データまで利用可能です。 (...) I / Oを使用することにより可能であるノンブロッキング fcntl(2)
F_SETFL
動作とO_NONBLOCK
開いているファイルのステータスを有効にします フラグます。
所属していません StackOverflow