从Python完成后关闭控制台应用程序
我有一个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时一切都很顺利,但在执行完后,命令提示符会等我回应。当我按下任意键后,它会关闭,然后exe文件会用不同的参数启动。
所以我想去掉这个按键回应的步骤。我尝试在bat文件的末尾加上“exit”,但没有效果。我该如何在exe完成工作后,从脚本中关闭命令提示符窗口呢?
提前感谢!

更新1:sarmold的方法很好用,但我觉得是这个exe(控制台应用程序)在等我回应。exe文件中的某些东西阻止了控制台窗口关闭,但我没有源代码的访问权限。我该如何在它执行完后关闭这个窗口呢?
更新2:我尝试在subprocess.call后添加“shell”调用,但这似乎也不管用,还是得手动回应控制台 :(
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate("Command Prompt")
shell.SendKeys("cls(ENTER)")
2 个回答
你每次运行 runExe.bat
的时候,是不是都会打开一个命令提示符窗口?其实它不一定要等你关闭这个窗口,但现在它确实在等。如果是这样的话,可以试试用 subprocess.call("cmd /C runExe.bat")
来运行你的脚本。
不过 @Arnold 说得对:简化你的设置会更好,我个人觉得让 Python 自己处理所有事情会更方便。
这里有两种可能的方法:
做一个包含所有命令的单一
bat
文件,包括regsvr32.exe
的命令,然后执行这个文件。让 Python 脚本为你完成所有操作。
对于第一种方法,使用 "a"
打开模式来 追加 内容到批处理文件中。(也许在脚本开始时先删除它。)在循环中把你的三个命令的内容写入批处理文件,这样你就会得到一个包含所有需要命令的 长 批处理文件。
然后在脚本的最后,循环外调用一次 subprocess.call()
命令来运行整个批处理文件。
对于第二种方法,去掉 所有 写入批处理文件的代码,直接用 Python 的 subprocess.call()
来运行你的 PathToExe
。这几乎就像删除所有处理 output
的行一样简单,只需把 output.write()
改成 subprocess.call()
,当然,还要稍微调整一下内容,让它们能直接适用于 subprocess.call()
。