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

119 python nohup

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

nohup ./cmd.py > cmd.log &
Run Code Online (Sandbox Code Playgroud)

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

vz0*_*vz0 335

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

nohup python -u ./cmd.py > cmd.log &
Run Code Online (Sandbox Code Playgroud)

  • 这个更好!非常感谢 :) (11认同)
  • 这应该是公认的答案......做了我想要的.谢谢! (3认同)

wul*_*ong 91

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

  • python以及其他基于C stdio的程序在交互式情况下使用行缓冲(stdout连接到tty)并在重定向到文件时使用块缓冲.如果`python -u`不起作用; `nohup`可能会引入自己的缓冲. (15认同)
  • @JFSebastian截至今天,`nohup`不缓冲输出,`python -u`工作正常.(只是人们的更新) (11认同)

Nur*_*hid 28

使用' -u '' nohup '为我工作.一切都将保存在" nohup.out "文件中.像这样-

nohup python -u your_code.py &
Run Code Online (Sandbox Code Playgroud)

  • 和@vz0的答案有什么区别? (2认同)

Ryu*_*usa 11

export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &
Run Code Online (Sandbox Code Playgroud)

要么

nohup python -u ./cmd.py > cmd.log &
Run Code Online (Sandbox Code Playgroud)

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


Gan*_*nan 5

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

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