2016-05-31 2 views
1

Как я могу реализовать что-то вродеКак использовать STDIN из subprocess.Popen

$ echo "hello" | my_app 

с использованием подпроцесс в Python?

Подпроцесс.Popen() ожидает канал или файл для STDIN. Но я хочу предоставить STDIN для вызываемой программы через переменную. Так что-то вроде

myinput = "hello" 
subprocess.Popen("an_external_programm", stdin=myinput) 
…. 
+1

Посмотрите 'Popen.communicate()'. Ссылка: https://docs.python.org/3/library/subprocess.html?highlight=subprocess#subprocess.Popen.communicate – elParaguayo

+0

Можете ли вы четко рассказать о своем случае использования? Прежде всего, вы похожи на то, что вы подключаете «привет» к вашему скрипту, во втором примере это переменная в вашем скрипте. – elParaguayo

+0

Я хочу вызвать внешний инструмент из моего сценария Python в виде примера оболочки, но контент - «привет» из shell sxample, исходит из переменной Python. – frlan

ответ

1

Я был в состоянии решить мою проблему с помощью Popen.communicate()

Так своего рода псевдо-код:

proc = subprocess.Popen(…) 
proc.communicate(input="my_input_via_stdin") 
0

В питон скрипт с именем myscript.py

import sys 

for line in sys.stdin: 
    print(line) 

в UNIX

эхо 'привет' | myscript.py