可能重复:
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
答案 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
班级constructor的subprocess.Popen()
参数。
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
subprocess.Popen(command, startupinfo=startupinfo)
如果您想要隐藏控制台窗口,不需要 shell=True
;见this回答。