2

可能重复:
在没有控制台的情况下使用 Popen 在 pythonw 中运行进程
如何从 Python (2.7) 中生成的进程中消除 Windows 控制台?

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

我正在执行的命令是执行快速任务的简单 exe。我遇到的问题是每次从 Python 中调用外部命令时,都会创建一个控制台,它会在我的屏幕上闪烁并获得焦点,从而阻止我在执行各种脚本时使用我的 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)

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

4

2 回答 2

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)镜像(具有许多额外功能),它是一个控制台程序,因此使用控制台窗口。这是您需要隐藏的控制台窗口。

于 2012-04-05T09:00:37.467 回答
2

您需要使用类构造函数startupinfo的参数。subprocess.Popen()

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

如果您只想隐藏控制台窗口,则不需要; shell=True看到这个答案。

于 2012-10-22T22:08:33.783 回答