1

我有这个:

$ cat waitforinput.sh 

#!/bin/sh
while read line
do
    echo $line
done                    

我这样做:

>>> p1 = subprocess.Popen("/home/abc/waitforinput.sh", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)

>>> for i in xrange(1000):
...     p1.stdin.write("this is a good idea")

但是当我现在这样做时,我看不到任何输出:

>>> for i in p1.stdout:
...     print i
... 

我究竟做错了什么 ?

4

1 回答 1

4

你需要一个换行符:

p1.stdin.write('this is a good idea\n')

简单解释:您正在运行的 shell 脚本需要一个完整的行,最后有一个换行符,这就是它知道该行已完成的方式。

p1.stdin.flush()注意:有时由于缓冲,您甚至必须添加一个。

于 2013-08-08T22:38:54.420 回答