Ответ 1
Ознакомьтесь с руководством подпроцесса. У вас есть опции с subprocess
, чтобы иметь возможность перенаправить stdin
, stdout
и stderr
процесса, который вы вызываете, к своему собственному.
from subprocess import Popen, PIPE, STDOUT
p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
grep_stdout = p.communicate(input='one\ntwo\nthree\nfour\nfive\nsix\n')[0]
print grep_stdout
Вы также можете построчно взаимодействовать с процессом. Учитывая это как prog.py
:
import sys
print 'what is your name?'
sys.stdout.flush()
name = raw_input()
print 'your name is ' + name
sys.stdout.flush()
Вы можете взаимодействовать с ним построчно с помощью:
>>> from subprocess import Popen, PIPE, STDOUT
>>> p = Popen(['python', 'prog.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
>>> p.stdout.readline().rstrip()
'what is your name'
>>> p.communicate('mike')[0].rstrip()
'your name is mike'
ОБНОВЛЕНИЕ: В python3 это должно быть 'mike'.encode()
.