我正在尝试在服务器上远程运行脚本,我打算使用以下内容:
nohup ./script.py > runtime.out 2> runtime.err &
并使用 tail -f runtiime.out
监控脚本的进度。我遇到的问题是重定向似乎没有按预期工作。出于我的问题的目的,我的问题可以如下所述重现:
脚本.py:
#!/usr/bin/env python3
import time
if __name__=='__main__':
for i in range(1000):
print("hi")
time.sleep(1)
然后在 shell 中运行 ./print.py > a.out &
。这将给出进程的 PID 并将按预期退出。然而,尽管程序在运行,a.out
还是空的。另外,如果我执行 ./print.py > a.out
而没有 '&',则 a.out
文件将保持为空,直到我按 Ctrl-C 命令。然后它会显示所有预期的输出,直到脚本终止。
我认为“>”不断重定向 stdout 和 stderr,而不仅仅是在命令完成时。
最佳答案
最简单的方法就是使用 python
命令的 -u
标志。它应该是这样的:
nohup python3 -u script.py > runtime.out 2> runtime.err &
根据python3 --help
:
-u : force the stdout and stderr streams to be unbuffered; this option has no effect on stdin; also PYTHONUNBUFFERED=x
关于python - 如何正确地将 Python 脚本输出重定向到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70490995/