我正在使用以下命令在后台运行 python 脚本:
nohup ./cmd.py > cmd.log &
但似乎 nohup 没有向日志文件写入任何内容。cmd.log 已创建,但始终为空。在 python 脚本中,我使用sys.stdout.write
而不是print
打印到标准输出。我做错什么了吗?
您可以使用该标志运行 Python-u
以避免输出缓冲:
nohup python -u ./cmd.py > cmd.log &
看起来您需要定期刷新标准输出(例如sys.stdout.flush()
)。print
在我的测试中,即使程序退出,Python 也不会自动执行此操作。
使用-u
withnohup
对我有用。使用-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 参数,这是唯一对我有用的方法。
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 &
与您的语法相比,您输入后似乎只缺少一个“&”符号......