如何正确地将Python脚本输出重定向到文件?

Try*_*nas 3 python bash shell

我正在尝试在服务器上远程运行脚本,并且打算使用以下内容: 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 命令为止。然后它显示所有预期的输出,直到脚本终止。

我认为“>”连续重定向标准输出和标准错误,而不仅仅是在命令完成时。

Syl*_*sta 8

最简单的方法就是使用命令-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