У меня есть следующий сценарий:
#!/usr/bin/python
while True:
x = raw_input()
print x[::-1]
Я звоню с ipython
:
In [5]: p = Popen('./script.py', stdin=PIPE)
In [6]: p.stdin.write('abc\n')
cba
, и он отлично работает.
Однако, когда ясделать это:
In [7]: p = Popen('./script.py', stdin=PIPE, stdout=PIPE)
In [8]: p.stdin.write('abc\n')
In [9]: p.stdout.read()
переводчик зависает.Что я делаю неправильно?Я хотел бы иметь возможность писать и читать из другого процесса несколько раз, чтобы передать некоторые задачи этому процессу.Что мне нужно сделать по-другому?
РЕДАКТИРОВАТЬ 1
Если я использую communicate
, я получаю это:
In [7]: p = Popen('./script.py', stdin=PIPE, stdout=PIPE)
In [8]: p.communicate('abc\n')
Traceback (most recent call last):
File "./script.py", line 4, in <module>
x = raw_input()
EOFError: EOF when reading a line
Out[8]: ('cba\n', None)
РЕДАКТИРОВАТЬ 2
Я попытался сбросить:
#!/usr/bin/python
import sys
while True:
x = raw_input()
print x[::-1]
sys.stdout.flush()
и здесь:
In [5]: from subprocess import PIPE, Popen
In [6]: p = Popen('./script.py', stdin=PIPE, stdout=PIPE)
In [7]: p.stdin.write('abc')
In [8]: p.stdin.flush()
In [9]: p.stdout.read()
, но снова зависает.