在用shell命令执行Python文件的时候,将原本的Python标准输出重定向到log文件,但是用tail命令查看log文件却没有看到输出,花了好几个小时都没有找到问题出在哪里,刚开始以为是代码写的有问题,最后才发现是Python的输出缓冲导致的。囧。
请看下面的例子:
test.py
import time
for i in range(10000000):
print(i,end='\r')
time.sleep(0.2)
在命令行中运行:python test.py > out.txt
几秒钟后,按Ctrl+c 结束程序,然后打开out.txt文件发现没有输出的内容,这是由于python 重定向后,会默认启用输出缓冲区,直到程序结束或者缓冲区满才会打印内容。
可以使用-u 参数来关闭缓冲区,达到立刻打印的效果。
在命令行中运行:python -u test.py > out.txt
还是几秒钟后,按Ctrl+c 结束程序,然后打开out.txt文件就可以看到输出被实时写入到文件中了。