У меня есть сценарий 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()
операторы из функции, выполняемой процессом, поскольку другая подпрограмма программы вызывает эту функцию в основном процессе и ей нужны эти операторы печати.
Я также заметил, что могу использовать логический флаг, чтобы указать, следует ли выполнять печать, но я надеялся, что кто-нибудь сможет предложить мне лучший подход.
Большое спасибо !