Python 进程在执行完成之前不会将标准输出写入文件

Python process doesn't write stdout to file until execution is finished

我正在启动一个新进程并将其标准输出重定向到一个文本文件。我想从文件中读取处理进度,但是在进程完成执行之前文件保持为空。你能解释一下这种行为吗?是否有解决办法?

p = Process(target=foo, args=(a,))
p.start()

def foo(a):
    sys.stdout = open(str(os.getpid()) + ".out", "w")
    print("test")
    time.sleep(10)

@azelcer 是正确的,我需要使用无缓冲输出,但是文本 i/o 不能在 python 中无缓冲,所以最好的方法是使用大小为 1 的缓冲区,这样输出将是每次打印一行时刷新到文件。

p = Process(target=foo, args=(a,))
p.start()

def foo(a):
    sys.stdout = open(str(os.getpid()) + ".out", "w", 1)
    print("test")
    time.sleep(10)

解决方法是将 flush=True 添加到您的 print 语句中。

from multiprocessing import Process
import sys
import time


def foo(a):
    sys.stdout = open(str(os.getpid()) + ".out", "w")
    print("test", flush=True)
    time.sleep(10)

if __name__ == '__main__':
    p = Process(target=foo, args=(1,))
    p.start()