解决Linux中使用nohup执行Python脚本没有将stdout和stderr输出重定向到nohup.log文件中的问题

问题描述

bash终端中运行如下命令,会发现nohup.log文件中并没有写入Python程序的stdout和stderr

nohup python3 test_script.py >> nohup.log 2>&1 &

解决办法

python3后边跟上一个-u参数就可以了

nohup python3 -u test_script.py >> nohup.log 2>&1 &

原因

使用nohup执行Python程序,默认stdoutstderr都被缓冲了。

以下是-u参数的官方解释

-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
-u:强制stdout和stderr的二进制I/O层不被缓冲;
          stdin总是被缓冲;文本I/O层将被行缓冲;
          也PYTHONUNBUFFERED = x