我使用以下命令在后台运行python脚本:
nohup ./cmd.py > cmd.log &
但似乎nohup没有在日志文件中写入任何内容。 cmd.log已创建但始终为空。在python脚本中,我使用sys.stdout.write
而不是print
来打印到标准输出。我做错了吗?
答案 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 &
答案 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定期运行。
我能够通过以下方式解决问题:
PS:我的脚本是用RHEL运行的ksh编写的
答案 6 :(得分:-1)
我按以下方式运行我的脚本,我完全没有问题:
nohup python my_script.py &> my_script.out &
与您的语法相比,您的输入后似乎只缺少一个“&”符号...