2017-02-04 4 views
-2

python(2.7)でstdinからブロッキング読み出し操作を実行すると、データがパイプに現れるまでプロセスを一時停止する方法はありますか?Pythonの標準入力からブロックする

read()の問題は、最初に返された後で、read()がもうブロックしないという事実にあります。例:

echo 'test test ' | python test.py

# test.py 
import sys 
while True: 
    string = sys.stdin.read() # Blocks only for the first time 
    print '!!!!!!!!' 
+3

'pipe'は、テキスト' test test'をスクリプトに送り、接続を閉じます。次の 'read()'で何を期待していますか? – furas

+0

他のプロセス(親プロセスなど)がこのプロセスのstdinに書き込むことができます。 –

+0

私の親プロセスは 'echo'しか書くことができず、スクリプトに書くことはできません。 – furas

答えて

1

f.read()ブロックするだけでなく、EOFに達した場合は、空の文字列を返します。入力ストリームが閉じられ、EOFに達しているため、あなたの例は壊れています。また、ほとんどの場合、行全体を読みたいと思っていたので、readlineが適切です。

+0

あなたが知っている、eofに達した後にstdinを修正する方法はありますか? –

+0

方法はありません。あなたの質問は[XY問題](http://meta.stackexchange.com/a/66378)のように聞こえますが、あなたが実際の問題を(新しい質問で)記述すると助けになるかもしれません –

+0

問題にはさまざまな解決策があります例えば、他のいくつかのインタープロセスツールを使用して)、私はすぐに直接アプローチでそれを処理できると思った。元の問題は、すべての入力で再起動する必要がない(開始時間が相当な)syntaxnetドッカーコンテナのラッパーです。それはstdinからのデータを処理することができ、内部スクリプトが何か他のものを読むのは非常に複雑です。 –

関連する問題