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