Оболочка с подпроцессом в Python - PullRequest
9 голосов
/ 03 марта 2012

Я читаю каждую нить, найденную в StackOverflow, при вызове команд оболочки из Python, используя subprocess, но я не смог найти ответ, относящийся к моей ситуации ниже:

Я бы хотел сделать следующее из Python:

  1. Запустить команду оболочки command_1. Соберите выходные данные в переменную result_1

  2. Оболочка трубы result_1 в command_2 и сбор выходных данных на result_2. Другими словами, запустите command_1 | command_2 , используя результат , полученный при запуске command_1 на шаге до

  3. Выполните тот же конвейер result_1 в третьей команде command_3 и соберите результат в result_3.

Пока я пробовал:

p = subprocess.Popen(command_1, stdout=subprocess.PIPE, shell=True)

result_1 = p.stdout.read();

p = subprocess.Popen("echo " + result_1 + ' | ' + 
command_2, stdout=subprocess.PIPE, shell=True)

result_2 = p.stdout.read();

причина, по-видимому, в том, что "echo " + result_1 не моделирует процесс получения вывода команды для трубопровода .

Возможно ли вообще использовать подпроцесс? Если да, то как?

1 Ответ

8 голосов
/ 03 марта 2012

Вы можете сделать:

pipe = Popen(command_2, shell=True, stdin=PIPE, stdout=PIPE)
pipe.stdin.write(result_1)
pipe.communicate()

вместо линии с трубой.

...