1

次のようなパイプを介してプロセスの出力を読みたいと思います。

./backup.sh | my-python_program.py

私のpythonプログラムは現在、標準入力から読み取ります:

buff =  sys.stdin.read()

これは素朴なようで、実行に時間がかかるスクリプトをブロックしているように見えますが。より良い方法はありますか?

4

2 に答える 2

1

Python がどのようにラップするかはわかりませんが、タイムアウト値を小さくしてselect()を使用することをお勧めします。

于 2013-03-27T15:52:13.140 に答える
0

パイプは明示的にブロックするように設定されており、ほとんどの目的でそれは理にかなっています.入力を読み取っていないときに実行できる他のものがありますか?

その場合は、非同期 I/O を調べることができます。Python でこれを行う場合は、 [ gevent[( http://www.gevent.org/ ) を使用することをお勧めします。効率的な非同期 I/O を行う軽量スレッド:

import gevent
from gevent import monkey; monkey.patch_all()

def read_from_stdin():
    buff = sys.stdin.read()
    # Whatever you're going to do with it

def some_other_stuff_to_do():
    # ...
    pass

gevent.Greenlet(read_from_stdin).run()
gevent.Greenlet(some_other_stuff_to_do).run()
于 2013-03-27T15:54:51.650 に答える