【发布时间】:2022-01-26 03:41:22
【问题描述】:
我正在尝试在服务器上远程运行脚本,并且打算使用以下几行内容:
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 命令。然后它会显示所有预期的输出,直到脚本终止。
我认为“>”会不断重定向标准输出和标准错误,而不仅仅是在命令完成时。
【问题讨论】:
-
@JervenClark 为什么会这样?无需在 Python 中打开文件。标准输出可以被刷新或无缓冲,如两个答案所示。
-
@JohnKugelman 谢谢你。我之前不知道你可以使用 print 刷新。我只知道你可以在一个文件中做。