我尝试使用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
行。
答案 0 :(得分:2)
您可能忘记输出换行符:
p.stdin.write('10.0\n')
发生的情况是您的子进程正在接收数据,但等待更多输入,直到找到换行符。如果等待处于此状态的进程的输出,则会使系统死锁。