我有一个调用 python 脚本并输出到文件的 crontab 作业:
python run.py &> current_date.log
现在有时当我这样做时
tail -f current_date.log
我看到文件填满了输出,但其他时候日志文件存在,但长时间保持为空。我确信 python 脚本在它开始运行后立即打印内容,并创建了日志文件。任何想法为什么它有时会保持空白?
当 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'
...
问题实际上是 Python(而不是 bash)并且是设计使然。Python 默认缓冲输出。运行 python-u
以防止缓冲。
flush()
另一个建议是创建一个在写入日志文件后立即调用的类(或特殊函数) 。