将外部进程控制到当前的python程序中?

时间:2013-11-20 06:57:08

标签: python subprocess

我有一个纯粹由命令提示符/ shell驱动的可执行文件xyz.exe。它以交互方式接收输入并显示输出。假设xyz.exe有点像Windows上典型的python shell。它等待用户输入>>>的内容,从而继续处理输入。

现在,我想控制这个xyz.exe进程并将其完全带入我当前的python控制台/ shell的上下文中。我怎样才能做到这一点?

我提到Assign output of os.system to a variable and prevent it from being displayed on the screen并尝试使用子进程执行相同操作:

import subprocess

cmd = r"\\sharedLocation\path\xyz.exe"
proc = subprocess.Popen([cmd], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
print("program output:", out)

但这只会在xyz.exe启动时获得xyz.exe的即时(第一次)输出,更像是欢迎消息。但是在第一次输出/欢迎消息之后,">>>"实际上等待用户输入wait() ...我希望我当前执行python脚本到xyz.exe并引入整个我的脚本输出范围内的{{1}}上下文。有没有办法在python中执行此操作?

1 个答案:

答案 0 :(得分:1)

实际上,无论你输入的是什么,都会被输入xyz.exe但是你不会看到任何进一步的消息,因为stdout=subprocess.PIPE已被传递给Popen的构造函数,这将导致命令的输出不被输出;相反,它被送到类似文件的proc.stdout。由print("program output:", out)打印欢迎信息。要使xyz.exe的输出显示在控制台中,请从Popen构造函数参数中删除stdout=subprocess.PIPE,。然后print("program output:", out)是不必要的。