你没有在任何输入中输入STDIN,所以你自然会得到一个
EOFError
在第4行,这是在
input
到达EOF。但即使你给它一些输入,因为它有一个无限循环,它最终也会消耗掉所有的输入并最终提高
EOF误差
。您应该捕获异常并优雅地结束脚本。
另外,在第5行有一个打印错误
inp
不是
输入
.
最后,你应该经常使用
communicate
而不是直接从
stdout
或直接写信给
stdin
.
从
Popen's documentation
:
警告:
使用
communicate()
而不是
.stdin.write
,
.stdout.read
或
.stderr.read
避免任何其他OS管缓冲区填充和阻塞子进程的死锁。
修正的
test.py
:
print('Test')
while True:
try:
inp = input('> ')
except EOFError:
print 'Done'
break
print(inp)
正确的互动方式
Py
:
>>> from subprocess import Popen, PIPE
>>> p = Popen(['python', 'test.py'], stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=False)
>>> p.communicate('hello\nworld\n')
('Test\n> hello\n> world\n> Done\n', '')
>>>