在后台运行.exe并通过python输入内容

时间:2014-09-30 12:21:51

标签: python popen

我有一个程序myshell.exe,我需要通过python进行交互(向它发送命令并读回结果)。

问题是,我只能运行myshell.exe一次(不能包围popen并在循环中进行通信)

我已尝试popenpopen.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已退出(我有一条打印的再见信息)。

任何想法,如果有任何方法吗? 感谢。

1 个答案:

答案 0 :(得分:1)

正如您在Popen.communicate文档中所读到的那样,它会等到myshell.exe退出后再返回。

使用p.stdoutp.stdin代替与流程进行通信:

p.stdin.write("run")
print p.stdout.read(1024)

p.stdinp.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的行为符合您的预期(例如,在发送第一个命令后不退出)。