2012-03-20 7 views
1

У меня есть функция, которую я называю progarm, с некоторыми аргументами и хочу получить результат.Вызов subprocess.call зависает, когда я устанавливаю stdout

Когда я использую следующие

proc = subprocess.call(["fetch.py", "--cookies=/tmp/tmp-cookies"], stdout=PIPE, stderr=PIPE) 
stdout, stderr = proc.communicate() 
return stdout 

приложение просто висит. Но если я бегу

return subprocess.call(["fetch.py", "--cookies=/tmp/tmp-cookies"]) 

я получить выход на моем экране и приложение работает нормально, однако мне нужно, чтобы получить выход в функцию.

Я использую Python 2.6.1, и не в состоянии использовать check_output

ответ

5

Как spec говорит,

Не используйте стандартный вывод = PIPE или Stderr = PIPE с этой функцией. Поскольку трубы не читаются в текущем процессе, дочерний процесс может блокироваться, если он генерирует достаточный вывод в канал для заполнения буфера для буфера OS.

Что вам нужно вместо этого, является subprocess.Popen:

proc = subprocess.Popen(["fetch.py", "--cookies=/tmp/tmp-cookies"], 
         stdout=PIPE, stderr=PIPE) 
stdout, stderr = proc.communicate() 
return stdout 

(Кроме того, subprocess.call не возвращает объект процесса, только статус выхода)

0

Ваш подпроцесс должен прочитать его стандартный ввод до связи является полным, и основной процесс может продолжаться. Обходной путь будет записываться в поток.

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