6

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

python run.py &> current_date.log

现在有时当我这样做时

tail -f current_date.log

我看到文件填满了输出,但其他时候日志文件存在,但长时间保持为空。我确信 python 脚本在它开始运行后立即打印内容,并创建了日志文件。任何想法为什么它有时会保持空白?

4

2 回答 2

14

当 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'

...
于 2009-10-16T20:37:21.567 回答
9

问题实际上是 Python(而不是 bash)并且是设计使然。Python 默认缓冲输出。运行 python-u以防止缓冲。

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

于 2009-10-16T20:35:39.140 回答