python, подпроцесс: чтение вывода из подпроцесса

У меня есть следующий сценарий:

#!/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

Если я использую общение , я получаю следующее:

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()

, но снова зависает.

13
задан gruszczy 27 September 2010 в 18:59
поделиться