【发布时间】:2011-12-27 23:17:05
【问题描述】:
我有一个 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 文件的末尾,但它不起作用。当 exe 完成工作时,如何从脚本关闭命令提示符窗口?
提前致谢!
Upd1:sarmold 的做事方式很好,但我认为这是 exe(控制台应用程序)正在等待我的回复。 exe 文件中的 Smth 阻止控制台窗口关闭,但我无权访问源。执行后如何关闭它的窗口?
Upd2:我尝试在 subprocess.call 之后添加“shell”调用,但这似乎也不起作用,仍然需要手动响应控制台:(
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate("Command Prompt")
shell.SendKeys("cls(ENTER)")
【问题讨论】:
-
+1,但我想提两件事。不建议对 Paths 和 PathToExe 等变量使用 CamelCase:最好使用小写字母或大写字母(用于常量)。我建议您查看 PEP 8 (python.org/dev/peps/pep-0008)。此外,您可以考虑使用通常的形式
" ".join(PathToExe, '-param1 -param2', param2Val[0], '-param3',…),而不是将许多包含空格的字符串连接在一起。 -
Windows 是否支持管道?如果是,也许您可以向
regsvr32.exe发送一个字符,就像您按下一个键一样?在 Unix 下,您可以做到echo | <cmd>和<cmd>接收换行符。 -
感谢 EOL,对于 pep 链接,将阅读它。嗯,谢谢,我会努力寻找管道解决方案!
标签: python windows command-line batch-file