使用子进程读写数据
我一直在尝试使用Python的subprocess
模块来和一个可执行程序进行交互,但一直没有成功。这个程序其实是一个非常简单的命令行脚本。
它的基本工作方式是:先给用户显示一些文字,然后等待用户输入一个数字,再显示更多文字,接着等待下一个输入,依此类推。
所以我这样设置了子进程:
from subprocess import Popen, PIPE
p = Popen('filename.exe', stdin=PIPE, stdout=PIPE)
然后我收到了第一个提示:
print p.stdout.readline()
正确返回了:
请输入一些值,等等。
太好了!接下来我尝试输入我想要的值:
p.stdin.write('10.0')
结果程序完全卡住了。我可以尝试获取下一个提示:
print p.stdout.readline()
但无论我怎么做,它还是会卡住。
那么,正确的方式来处理这种一行读写的操作是什么呢?我觉得我可能在write
这一行搞错了。
1 个回答
2
你可能忘记输出换行符了:
p.stdin.write('10.0\n')
发生的情况是,你的子进程正在接收数据,但在找到换行符之前,它会一直等待更多的输入。如果你在这种状态下等待进程的输出,就会导致系统卡住。