使用子进程读写数据

0 投票
1 回答
576 浏览
提问于 2025-04-18 02:51

我一直在尝试使用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')

发生的情况是,你的子进程正在接收数据,但在找到换行符之前,它会一直等待更多的输入。如果你在这种状态下等待进程的输出,就会导致系统卡住。

撰写回答