我有一个程序myshell.exe,我需要通过python进行交互(向它发送命令并读回结果)。
问题是,我只能运行myshell.exe
一次(不能包围popen并在循环中进行通信)
我已尝试popen
和popen.communicate()
,但似乎运行myshell.exe
,发送命令然后退出流程。
# settin up the command
p = Popen("myshell.exe", stdout=PIPE, stdin=PIPE, stderr=PIPE, shell=True)
# sending something (and getting output)
print p.communicate("run");
此时,从打印输出中我可以看到我的myshell.exe
已退出(我有一条打印的再见信息)。
任何想法,如果有任何方法吗? 感谢。
答案 0 :(得分:1)
正如您在Popen.communicate
文档中所读到的那样,它会等到myshell.exe
退出后再返回。
使用p.stdout
和p.stdin
代替与流程进行通信:
p.stdin.write("run")
print p.stdout.read(1024)
p.stdin
和p.stdout
是常规文件对象。您可以循环读取和写入它们,只需将p = Popen(...)
部分留在外面:
p = Popen("myshell.exe", stdout=PIPE, stdin=PIPE, stderr=PIPE, shell=True)
for i in range(3):
p.stdin.write("run")
print p.stdout.read(16)
p.terminate()
这假设myshell.exe
的行为符合您的预期(例如,在发送第一个命令后不退出)。