2009-12-22 2 views
1

Im не Баш эксперт так терпите меняперенаправлять стандартный вывод вызывающего процесса

У меня есть питон скрипт Thats запуск других процессов, которые затем испускают журнальные сообщения на стандартный вывод.
какую команду bash я бы использовал для перенаправления stdout этих дочерних процессов обратно на stdout родительского процесса (скрипт python, который запускает процессы)?

спасибо заранее

ответ

3

Если вы просто хотите, чтобы захватить выход из дочерних процессов в вашем питона сценарий, лучший способ сделать это было бы использовать subprocess модуль:

import subprocess 

p = subprocess.Popen(['/bin/ls', '-l'], stdout=subprocess.PIPE) 
(out, _) = p.communicate() 
print "Output:", out 
+0

im, что делает это сейчас, но это дает результат только после завершения команды. однако, если его длительный процесс (какой-то сервер или что-то еще), я должен подождать, пока вы не выйдете на stdout ... – deepblue

+0

Вы можете поэкспериментировать с 'p.stdout.read()' и аналогичными функциями для чтения входящих данные постепенно. Но имейте в виду потенциальные проблемы, если процессы также производят вывод на stderr: http://docs.python.org/library/subprocess.html#subprocess.Popen.kill – sth

+0

классный. это похоже на то, что мне нужно. Я положу его в петлю и прочитаю/распечатаю материал там ... спасибо! – deepblue

1

Я предполагаю, что вы используете os.system("command") для выполнения ваших скриптов. Этот метод выполняет только эту команду и дает вам возвращаемое значение программы, а НЕ является стандартным. Вам нужен модуль subprocess. Например:

import subprocess 

proc = subprocess.Popen(['command', 'option 1', 'option 2'], stdout=subprocess.PIPE) 
output = proc.communicate()[0] #for stdout. Use proc.communicate[1] for stderr 

смотреть на ваш комментарий, ваше решение простое:

subprocess.Popen('command option 1 option 2', shell=True) 

Примечание: команда должна быть передана в виде строки. Последовательность не работает.

+0

вот что я сейчас делаю. посмотрите на проблему с этим – deepblue

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