2012-03-03 2 views
9

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

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

  1. Выполнение команды оболочки command_1. Собирают выход в переменной result_1

  2. Shell трубы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 не моделирует процесс получения вывода команды для трубопроводов.

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

+2

См. [Этот пример в документах] (http://docs.python.org/library/subprocess.html#replacing-shell-pipeline) для правильного пути его выполнения. –

+1

Спасибо @SvenMarnach, это все равно позволит мне собрать результат первой команды в переменной Python? –

ответ

8

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

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

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

+0

Это выглядит великолепно. Как бы это изменилось, если я хочу снова передать 'result_1' * * * другой команде? –

+1

В этот момент 'result_1' является строкой. Вы должны иметь возможность повторять те же 3 строки с помощью новой команды. –

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