当将 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 秒内什么都不会出现,此时所有三行都会出现。
将此与脚本进行比较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 解释器完成执行后,输出才可用于下一个命令。有没有办法改变这种行为?