Python - nohup.out文件中不显示print语句

17

我刚接触Python和Web开发,有一个基础问题需要解决。
我使用Pyramid作为服务器,并使用nohup.out将输出写入文件。

nohup ../bin/pserve development.ini  

当我执行tail -f nohup.out命令时, 我可以看到从我的代码中的logging.info()调用发出的所有输出, 但我没有看到所有print()调用的输出。

这是什么原因,如何设置才能在nohup文件中看到print()的输出?

3个回答

25
你可以使用 <\p>
nohup python -u python_script.py &

2
-u: force the binary I/O layers of stdout and stderr to be unbuffered; stdin is always buffered; text I/O layer will be line-buffered; also PYTHONUNBUFFERED=x - Logan Yang
python -u 对我有效,而 stdbuf -oL -eL python 则无效。 - user2204107

11
你可以使用stdbuf -oL来刷新打印语句。命令应该是这样的:
nohup stdbuf -oL python python_script.py > nohup.out &

谢谢你的帮助性回答,但我认为你的命令需要以 & 结束,对吗? - lleiou
这个不起作用。在CentOS 7.4上测试过,使用Python 3.7.6。无论我们是否使用stdbuf -oL,行为都是相同的。 - jdhao

4

当输出不是到终端时,会缓冲打印输出。 nohup 会将 stdout 替换为非终端(实际上是文件)。

如果没有任何代码,我的猜测是您的输出被缓冲在 Python 进程中,当缓冲区满时,它将被刷新到 nohup.out。要确定是否是这种情况,请尝试添加更多的打印内容以加快填充缓冲区的速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接