python调用外部程序而不打开控制台(dos提示)

时间:2012-04-05 08:30:51

标签: python windows subprocess

  

可能重复:
  Running a process in pythonw with Popen without a console
  How do I eliminate Windows consoles from spawned processes in Python (2.7)?

我正在使用Python 2.7并在IDLE中运行python脚本。

我正在执行的命令是执行快速任务的简单exe。我遇到的问题是每次从Python中调用外部命令时都会创建一个 console ,它会在我的屏幕上闪烁并占据焦点,从而阻止我在执行各种脚本时使用我的PC。

我在Python中调用它们的示例如下:

result = call(["Commands\Set.exe", str(i), ARG2])
check_output(["Commands\Read.exe", ARG2])

正在寻找解决方案,我遇到了添加以下内容

shell=True

发出以下命令

check_output(["Commands\Read.exe", ARG2], shell=True)

但是每次调用外部命令时,我仍然会出现 console

2 个答案:

答案 0 :(得分:4)

这里可能有两个问题。首先,如果您的python脚本具有.pyw扩展名,那么它们将与不使用控制台*的pythonw相关联。但是,你有shell = True,它会生成一个控制台*。您需要运行该程序并隐藏控制台:

import subprocess
proc = subprocess.Popen('hello.py',  creationflags=subprocess.SW_HIDE, shell=True)
proc.wait()

*迂腐地说,它不是dos提示符,而是一个控制台窗口。 DOS - 磁盘操作系统 - 是IBM大型机操作系统。 MS-DOS或PC-DOS命令行功能由cmd.exe(Windows shell)镜像(具有许多额外功能),这是一个控制台程序,因此使用控制台窗口。这是你需要隐藏的控制台窗口。

答案 1 :(得分:2)

您需要使用startupinfo班级constructorsubprocess.Popen()参数。

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
subprocess.Popen(command, startupinfo=startupinfo)

如果您想要隐藏控制台窗口,不需要 shell=True;见this回答。