印刷された出力をpythonスクリプトからgrepなどのコマンドにパイプする場合、スクリプトからの出力は、スクリプト全体の完了後にのみフォローアップコマンドにパイプされるように見えます。
たとえばtest_grep.py
、次のようなスクリプトでは、次のようになります。
#!/usr/bin/env python
from time import sleep
print "message1"
sleep(5)
print "message2"
sleep(5)
print "message3"
で呼び出すと./test_grep.py | grep message
、10秒間何も表示されません。その時点で、3行すべてが表示されます。
これをスクリプトと比較してくださいtest_grep.sh
:
#!/usr/bin/env bash
echo "message1"
sleep 5
echo "message2"
sleep 5
echo "message3"
./test_grep.sh | grep message
すぐにを出力message1
し、5秒間隔でmessage2
とが続きmessage3
ます。
これは、Pythonインタープリターの実行が終了すると、次のコマンドで出力を利用できるようになるためだと思います。この動作を変更する方法はありますか?