关于python:Nohup没有将日志写入输出文件

Nohup is not writing log to output file

我正在使用以下命令在后台运行python脚本:

1
nohup ./cmd.py > cmd.log &

但是看来nohup没有向日志文件写入任何内容。 cmd.log已创建,但始终为空。 在python脚本中,我使用sys.stdout.write而不是print打印到标准输出。 我做错什么了吗?


您可以使用-u标志运行Python以避免输出缓冲:

1
nohup python -u ./cmd.py > cmd.log &


看来您需要定期刷新stdout(例如sys.stdout.flush())。在我的测试中,Python不会自动使用print进行此操作,直到程序退出。


将'-u'与'nohup'一起使用对我有用。一切都将保存在" nohup.out"文件中。像这样-

1
nohup python -u your_code.py &

您也可以将其保存到目录中。这条路-

1
nohup python -u your_code.py > your_directory/nohup.out &


1
2
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &

要么

1
nohup python -u ./cmd.py > cmd.log &

https://docs.python.org/2/using/cmdline.html#cmdoption-u


Python 3.3及更高版本有一个flush参数用于打印,这是唯一对我有用的方法。

1
2
print("number to train =" + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)

我有一个类似的问题,但未与Python进程关联。我正在运行一个脚本,该脚本执行了nohup,并且该脚本通过cron定期运行。

我可以通过以下方法解决问题:

  • 重定向标准输入,标准输出和标准错误
  • 确保通过nohup调用的脚本没有在后台运行其他任何东西
  • PS:我的脚本是用RHEL上的ksh编写