使用子进程读取和写入进程

时间:2014-04-15 17:47:17

标签: python io subprocess

我尝试使用Python的subprocess模块与可执行程序进行交互(尝试不成功)。该程序是一个非常简单的基于命令行的脚本。

它基本上只是按以下方式起作用:提示用户输入文本,等待数字输入,提示更多文本,等待下一个输入等等。

所以我像这样设置子流程

from subprocess import Popen, PIPE
p = Popen('filename.exe', stdin=PIPE, stdout=PIPE)

然后我得到第一个提示

print p.stdout.readline()

正确返回

  

输入一些值blah blah

大!然后我尝试输入所需的值

p.stdin.write('10.0')

然后完全挂起。我可以尝试抓住下一个提示

print p.stdout.readline()

但无论如何它仍然会挂起。

执行此一行读/写业务的正确方法是什么?我必须弄乱我认为的write行。

1 个答案:

答案 0 :(得分:2)

您可能忘记输出换行符:

p.stdin.write('10.0\n')

发生的情况是您的子进程正在接收数据,但等待更多输入,直到找到换行符。如果等待处于此状态的进程的输出,则会使系统死锁。