10

開いているところから読んos.pipe()で、読んでいる時点で空かどうかを確認しようとしています。問題は、呼び出すread()と、実際に何かを読み取ることができるまでプログラムがブロックされることですが、私が行っているテストが成功した場合は、何もありません。

タイムアウトで使用できることはわかってselect.select()いますが、問題に対する別の解決策があるかどうかを知りたいと思いました。

4

1 に答える 1

16

あなたはこれを試すかもしれません。

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 が可能になります。

于 2009-03-23T17:54:55.127 に答える