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

2 投票
2 回答
1792 浏览
提问于 2025-04-17 06:12

我有一个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完成工作后,从脚本中关闭命令提示符窗口呢?
提前感谢!

enter image description here

更新1:sarmold的方法很好用,但我觉得是这个exe(控制台应用程序)在等我回应。exe文件中的某些东西阻止了控制台窗口关闭,但我没有源代码的访问权限。我该如何在它执行完后关闭这个窗口呢?

更新2:我尝试在subprocess.call后添加“shell”调用,但这似乎也不管用,还是得手动回应控制台 :(

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

2 个回答

1

你每次运行 runExe.bat 的时候,是不是都会打开一个命令提示符窗口?其实它不一定要等你关闭这个窗口,但现在它确实在等。如果是这样的话,可以试试用 subprocess.call("cmd /C runExe.bat") 来运行你的脚本。

不过 @Arnold 说得对:简化你的设置会更好,我个人觉得让 Python 自己处理所有事情会更方便。

2

这里有两种可能的方法:

  1. 做一个包含所有命令的单一 bat 文件,包括 regsvr32.exe 的命令,然后执行这个文件。

  2. 让 Python 脚本为你完成所有操作。

对于第一种方法,使用 "a" 打开模式来 追加 内容到批处理文件中。(也许在脚本开始时先删除它。)在循环中把你的三个命令的内容写入批处理文件,这样你就会得到一个包含所有需要命令的 批处理文件。

然后在脚本的最后,循环外调用一次 subprocess.call() 命令来运行整个批处理文件。

对于第二种方法,去掉 所有 写入批处理文件的代码,直接用 Python 的 subprocess.call() 来运行你的 PathToExe。这几乎就像删除所有处理 output 的行一样简单,只需把 output.write() 改成 subprocess.call(),当然,还要稍微调整一下内容,让它们能直接适用于 subprocess.call()

撰写回答