【发布时间】:2020-05-28 10:13:11
【问题描述】:
我有一个执行两个主要任务的 Python 脚本:
- 从脚本本身执行代码
- 使用
multiprocessing.Process(target=...)启动后台进程
我的问题是:有什么方法可以在不影响主进程的情况下从该特定进程中静音stdout?我已经尝试通过sys.stdout进行更改,但它会影响每个进程和主进程(程序的每个实例都指向同一个对象):
>>> import multiprocessing
>>> import sys
>>> def a():
... print('{} - {}'.format(sys.stdout, id(sys.stdout)))
...
>>> for i in range(5):
... multiprocessing.Process(target=a).start()
...
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
>>> <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
>>> a()
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> - 140230387621232
不可能从进程正在执行的函数中删除所有print() 语句,因为程序的另一个例程在主进程上调用该函数并且它需要那些打印语句。
我还注意到我可以使用布尔标志来指示是否应该执行打印,但我希望任何人都可以给我一个更好的方法。
非常感谢!
【问题讨论】:
标签: python stdout suppressmessage