如何立即在日志文件中获取stdout/stderr?
问题描述:
要运行我使用下面的bash脚本一些Python程序:如何立即在日志文件中获取stdout/stderr?
python3 /MyProg.py 0>/dev/null 1>>output_log_file 2>error_log_file
然而,PROG只有结束后,我能得到的信息。程序运行时,这些文件中没有任何数据。
我可以重写此行为以立即获取日志数据吗?我的操作系统是Raspbian。
答
我怀疑程序需要刷新输出和错误定期,通过
import sys
sys.stdout.flush()
sys.stderr.flush()
答
似乎有是因为它采用了全缓存,而不是行缓冲的。尝试在bash命令之前使用unbuffer
,并且应该立即在屏幕上显示输出。
如果您可以编辑'MyProg.py',则可以在流上调用'flush'。否则,只有在缓冲区(我的机器上的4Kb已满,或流被关闭)时才会写入。我不知道是否有办法让linux让缓冲区更小,所以它的写入更频繁。 –