11

我有一个简单的 python 脚本,它只运行一个无限的 while 循环并打印“正在运行”。当我在后台使用 nohup 启动它时,我在当前目录中看到一个 nohup.out 文件,但没有写入任何内容。我很困惑。我试过以下

nohup test.py 

写入 nohup.out 但显然不在后台运行

nohup test.py &

在后台运行但不写入 nohup.out

nohup test.py 2>&1 &

也在后台运行,但不写入 nohup.out

我敢打赌我错过了一些简单的东西。有任何想法吗?

这是我的python脚本供参考:

import sys
from time import sleep

def main():
    print "Starting...."
    while True:
        print "running..."
        sleep(5.00)


if __name__ == "__main__":
     main()
4

2 回答 2

21

也许您的标准输出没有立即刷新,因为它没有连接到终端。尝试使用

import sys
sys.stdout.flush()

刷新你的输出。

在 python3 中,您可以将flush=True其用作 print 函数的参数来执行此操作。

print("running...", flush=True)
于 2011-12-16T16:46:50.927 回答
1

简短的回答是用于nohup python -u args...强制 python 为每个 print() 调用打印和刷新缓冲区。

我相信这是由于 Python 的默认行为首先写入缓冲区,但nohup不会触发缓冲区被清除。

更具体的答案可以在https://superuser.com/questions/764479/force-output-buffer-flush-in-running-program找到。

于 2022-01-01T08:26:05.930 回答