为什么bash有时不会将python程序的输出刷新到文件中

ola*_*ndo 6 bash file flush

我有一个crontab作业调用python脚本并输出到文件:

python run.py &> current_date.log
Run Code Online (Sandbox Code Playgroud)

现在有时当我这样做

tail -f current_date.log
Run Code Online (Sandbox Code Playgroud)

我看到文件填满了输出,但有时日志文件存在,但长时间保持空白.我敢肯定,python脚本正在打印东东吧它开始运行后,日志文件创建.任何想法为什么它在某些时候保持空虚?

mob*_*mob 13

Python在检测到它没有写入tty时缓冲输出,因此您的日志文件可能不会立即收到任何输出.您可以将脚本配置为刷新输出,或者可以使用-u参数调用python 以获取无缓冲输出.

$ python -h

...

-u     : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)
         see man page for details on internal buffering relating to '-u'

...
Run Code Online (Sandbox Code Playgroud)


Ste*_*ven 9

问题实际上是Python(不是bash)并且是设计的.Python默认情况下缓冲输出.运行python -u以防止缓冲.

另一个建议是创建一个flush()在写入日志文件后立即调用的类(或特殊函数).