从Python完成后关闭控制台应用程序

时间:2011-11-13 08:19:21

标签: python windows command-line batch-file

我有一个exe文件,我必须使用几个参数调用,为此我使用bat文件。我执行bat文件后命令提示符没有关闭,而是等我按一个键。现在我必须多次运行这个exe,为此我想运行一个脚本来为我做这个。

i = 0
for path in Paths
    outout = codecs.open('runExe.bat', 'w')
    output.write(PathToExe + " -param1" + " -param2 " + param2Val[0] + " -param3 " + param3Val[0] + " -param4 " + param4Val[0] + " -param5 param5Val")
    output.close()
    subprocess.call(["regsvr32.exe", path, "-u", "-s"])
    subprocess.call(["regsvr32.exe", path, "-s"])
    subprocess.call("runExe.bat")
    i + = 1

其中param3Val,param4Val,param5Val是包含相关命令提示参数值的列表。
当我调用这个bat文件时,一切都可以完美地用于exe的第一个乐趣,但是在执行之后,命令promt等待我的响应。当我按任意键时,它会关闭,然后exe文件以不同的参数开始 所以我想用按键消除东西。我试图将“退出”放到bat文件的末尾,但它没有用。当exe完成工作时,如何从脚本关闭命令提示符窗口?
提前致谢! enter image description here Upd1:sarmold的做事方式很好,但我认为这是exe(控制台应用程序)等待我的回复。 exe文件中的Smth会阻止控制台窗口关闭,但我无权访问源。如何在执行后关闭它的窗口?

Upd2:我试图在subprocess.call之后添加“shell”调用,但这似乎也不起作用,仍然必须手动响应控制台:(

shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate("Command Prompt")
shell.SendKeys("cls(ENTER)")

2 个答案:

答案 0 :(得分:2)

这里有两种可能的方法:

  1. 只制作一个包含所有命令的bat文件,包括regsvr32.exe命令,并执行该命令。

  2. 让Python脚本为您完成所有事情。

  3. 对于第一种方法,使用"a"打开模式追加到批处理文件。 (也许在脚本开始时将其删除。)将三个命令的内容写入循环中的批处理文件 - 这样您最终得到一个批处理文件,其中包含您需要的所有命令。 / p>

    然后在循环外部,在脚本结束时调用subprocess.call()命令,以运行整个过程。

    对于第二种方法,删除所有批处理文件,并使用Python PathToExe运行subprocess.call()。这几乎就像删除与output一起使用的所有行一样简单,但将output.write()更改为subprocess.call() - 显然,稍微调整一下内容,以便它们适用于{{1}直接。

答案 1 :(得分:1)

您是否以每次运行runExe.bat时启动命令提示符的方式运行此操作?它不应该必然等待你关闭控制台,但是既然如此,请尝试使用subprocess.call("cmd /C runExe.bat")运行脚本。

@Arnold是对的,但是:最好简化你的设置和(imho)让python处理所有事情。