2010-08-12 1 views
2

Мне нужно захватить stdout процесса, который я выполняю через подпроцесс, в строку, чтобы затем поместить его в TextCtrl приложения wx, которое я создаю. Как мне это сделать?Как получить stdout в строку (Python)

EDIT: Я также хотел бы знать, как определить, когда процесс завершается

ответ

7

С subprocess documentation по:

from subprocess import * 
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] 
+0

выход = subprocess.Popen ("эхо" Привет, стандартный вывод = subprocess.PIPE) .communicate() [0] дает ошибку, которая говорит: «Невозможно найти указанный файл"; в чем проблема? –

+1

Если вы хотите выполнить целую команду в строке, вам нужно передать 'shell = True'. В противном случае вам нужно передать команду и args в виде списка строк: 'subprocess.Popen ([" echo "," hello "], stdout = subprocess.PIPE) .communicate() [0]' –

2

Посмотрите на модуль подпроцесса.

http://docs.python.org/library/subprocess.html

Это позволяет сделать много же Перенаправление ввода и вывода, которые вы можете сделать в оболочке.

Если вы пытаетесь перенаправить stdout исполняемого в настоящее время скрипта, это всего лишь вопрос об удержании правильного дескриптора файла. В верхней части головы stdin равно 0, stdout равно 1, а stderr равно 2, но двойная проверка. На этом я мог ошибаться.