我正在尝试在服务器上远程运行脚本,并且打算使用以下内容:
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)
Run Code Online (Sandbox Code Playgroud)
然后在 shell 中运行./print.py > a.out &。这将给出进程的 PID,并将按预期退出。然而,a.out尽管程序正在运行,但它是空的。另外,如果我./print.py > a.out 不使用“&”,则a.out文件将保持为空,直到我按 Ctrl-C 命令为止。然后它显示所有预期的输出,直到脚本终止。
我认为“>”连续重定向标准输出和标准错误,而不仅仅是在命令完成时。
最简单的方法就是使用命令-u的标志python。它应该看起来像这样:
nohup python3 -u script.py > runtime.out 2> runtime.err &
Run Code Online (Sandbox Code Playgroud)
根据python3 --help:
-u :强制 stdout 和 stderr 流不被缓冲;该选项对标准输入没有影响;还有 PYTHONUNBUFFERED=x
| 归档时间: |
|
| 查看次数: |
2732 次 |
| 最近记录: |