次のようなパイプを介してプロセスの出力を読みたいと思います。
./backup.sh | my-python_program.py
私のpythonプログラムは現在、標準入力から読み取ります:
buff = sys.stdin.read()
これは素朴なようで、実行に時間がかかるスクリプトをブロックしているように見えますが。より良い方法はありますか?
Python がどのようにラップするかはわかりませんが、タイムアウト値を小さくしてselect()を使用することをお勧めします。
パイプは明示的にブロックするように設定されており、ほとんどの目的でそれは理にかなっています.入力を読み取っていないときに実行できる他のものがありますか?
その場合は、非同期 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()