我有一个执行两个主要任务的 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()
语句,因为程序的另一个例程在主进程上调用该函数并且它需要那些打印语句。
我还注意到我可以使用布尔标志来指示是否应该执行打印,但我希望任何人都可以给我一个更好的方法。
非常感谢!