0
我一直(不成功)尝试使用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
系列。
现在我觉得很蠢。我要去喝更多的咖啡。谢谢! – CoryKramer
@Cyber:不要觉得自己很愚蠢。如果直接使用阻塞“p.stdin/p.stdout”,死锁非常容易。 '\ n'可能不够;你可能需要'os.linesep',否则你可能需要'p.stdin.flush()'。明确地为'Popen'设置'bufsize'。它在不同的Python版本上有不同的默认值。另外,你怎么知道'p.stdout.readline()'就够了。如果答案是两行呢?理想情况下,如果可以,则使用'p.communicate(input)',即输入不依赖于输出。子过程也可以在stdout/stderr之外写入,例如直接写入终端。你可以使用'pexpect'。 – jfs