2012-02-05 2 views
2

Я вызываю подпроцесс и хочу отключить любой вывод в своей оболочке. Я пытаюсь сделать это с помощью:Предотвращение подпроцесса подпроцесса от записи в 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, и сервер фактически распечатывает.

+0

Ваш пример использует '' popen() '', а не '' subprocess'' – Carpetsmoker

+0

subprocess наследует stdout и stderr от своих родителей по умолчанию. Не доходя до охоты за дикими ttys, нет никакого способа, чтобы sububprocess мог получить ваш stdin. Какие программы вы выполняете? – phihag

+1

@Carpetsmoker: Popen живет в подпроцессе модуля в более новых версиях python –

ответ

-2

Как описано выше, вызываемый процесс вызывал сервер, на котором был создан mysterios stdout.

Смежные вопросы