Nohup没有将日志写入输出文件

时间:2012-10-16 17:09:04

标签: python nohup

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

nohup ./cmd.py > cmd.log &

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

7 个答案:

答案 0 :(得分:301)

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

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

答案 1 :(得分:84)

看起来您需要定期刷新标准输出(例如sys.stdout.flush())。在我的测试中,在程序退出之前,即使使用print,Python也不会自动执行此操作。

答案 2 :(得分:25)

使用' -u ' ' nohup ' 为我工作。所有内容都会保存在" nohup.out "文件。像这样 -

nohup python -u code.py &

答案 3 :(得分:5)

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

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

我能够通过以下方式解决问题:

  1. 重定向stdin,stdout和stderr
  2. 确保通过nohup调用脚本并没有在后台运行任何其他内容
  3. PS:我的脚本是用RHEL运行的ksh编写的

答案 6 :(得分:-1)

我按以下方式运行我的脚本,我完全没有问题:

nohup python my_script.py &> my_script.out &

与您的语法相比,您的输入后似乎只缺少一个“&”符号...