我有如下脚本:
#!/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()
但它再次卡住了。
sys.stdout.flush()
添加到脚本中,并使用p.stdout.readline
最终解决了问题。非常感谢您的帮助。 - gruszczy