[英]Nohup is not writing log to output file
我正在使用以下命令在后台运行 python 脚本:
nohup ./cmd.py > cmd.log &
但似乎 nohup 没有向日志文件写入任何内容。 cmd.log 已创建但始终为空。 在 python 脚本中,我使用sys.stdout.write
而不是print
来打印到标准输出。 我做错了什么吗?
您可以使用-u
标志运行 Python 以避免输出缓冲:
nohup python -u ./cmd.py > cmd.log &
看起来您需要定期刷新标准输出(例如sys.stdout.flush()
)。 在我的测试中,即使使用print
Python 也不会自动执行此操作,直到程序退出。
将-u
与nohup
一起使用对我nohup
。 使用-u
将强制stdout
、 stderr
流无缓冲。 它不会影响标准输入。 一切都将保存在“ nohup.out ”文件中。 像这样-
nohup python -u your_code.py &
您也可以将其保存到您的目录中。 这条路-
nohup python -u your_code.py > your_directory/nohup.out &
此外,您可以使用PYTHONUNBUFFERED
。 如果将其设置为非空字符串,它将与-u
选项相同。 在运行 python 代码之前使用这个运行下面的命令。
export PYTHONUNBUFFERED=1
要么
export PYTHONUNBUFFERED=TRUE
PS-我会建议使用像 cron-job 这样的工具在后台运行和计划执行。
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &
要么
nohup python -u ./cmd.py > cmd.log &
Python 3.3 及更高版本有一个用于打印的刷新参数,这是唯一对我有用的方法。
print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)
我有一个类似的问题,但与 Python 进程无关。 我正在运行一个执行 nohup 的脚本,并且该脚本通过 cron 定期运行。
我能够通过以下方式解决问题:
PS:我的脚本是用在 RHEL 上运行的 ksh 编写的
我按以下方式运行我的脚本,我完全没有问题:
nohup python my_script.py &> my_script.out &
与您的语法相比,您输入后似乎只缺少一个“&”符号...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.