如何使孩子保持沉默 进程标准输出和标准?


def f(x) :
....do something..
....many print statements....
quit()
a = Process(target=f, args=1)
a.start()
....main process also has many print statement....

如何在不使主函数的标准输出静音的情况下,使新生成的函数 f 中的所有打印语句和错误语句静音?此外,我可以将所有子输出实时定向到特定文件(即不存储在缓冲区中然后保存,因为如果程序崩溃,缓冲区可能会丢失)?

我建议使用 contextlib 库中的redirect_stdoutredirect_stderr,以便重定向子进程中运行的函数的所有输出。首先,创建一个装饰器工厂redirect_output,然后将其应用于传递filename的目标函数,您希望将标准输出和标准作为其参数重定向到其中。这是一个完整的工作示例:

#!/usr/bin/env python3
import sys
from functools import wraps
from contextlib import redirect_stdout, redirect_stderr
from multiprocessing import Process
def redirect_output(filename):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
with open(filename, 'w') as f:
with redirect_stdout(f), redirect_stderr(f):
return func(*args, **kwargs)
return wrapper
return decorator
@redirect_output('worker.log')
def worker(*args, **kwargs):
print(f'stdout: worker {args}, {kwargs}')
print(f'stderr: worker {args}, {kwargs}', file=sys.stderr)
if __name__ == '__main__':
proc = Process(target=worker, args=(1, 2), kwargs={'foo': 'bar'})
proc.start()

最新更新