Я вызываю подпроцесс и хочу отключить любой вывод в своей оболочке. Я пытаюсь сделать это с помощью:Предотвращение подпроцесса подпроцесса от записи в stdout
with tempfile.TemporaryFile() as tempf:
proc = Popen(cmd, stdout=tempf, stderr=tempf)
proc.communicate()
Но есть еще некоторый выход (но меньше, чем обычно), появляющийся на терминале. Может ли проблема заключаться в том, что вызываемый процесс использует os.execvp
? Любые предложения полностью отключить вывод для всех подпроцессов?
Примечание
Перенаправление на devnull это лучший способ отключить выход:
with open(os.devnull, 'w') as tempf:
proc = Popen(cmd, stdout=tempf, stderr=tempf)
proc.communicate()
Вопрос ответил!
Очень простое решение: вызываемый процесс использует CORBA, и сервер фактически распечатывает.
Ваш пример использует '' popen() '', а не '' subprocess'' – Carpetsmoker
subprocess наследует stdout и stderr от своих родителей по умолчанию. Не доходя до охоты за дикими ttys, нет никакого способа, чтобы sububprocess мог получить ваш stdin. Какие программы вы выполняете? – phihag
@Carpetsmoker: Popen живет в подпроцессе модуля в более новых версиях python –