使用 subprocess.Popen 隐藏控制台

Posted

技术标签:

【中文标题】使用 subprocess.Popen 隐藏控制台【英文标题】:Hide console with subprocess.Popen 【发布时间】:2014-09-27 04:06:45 【问题描述】:

我是 subprocess.Popen 的新手,并且一直在阅读文档。我只是想让我的进程不打开控制台。我需要这些参数中的哪一个?

stdout=subprocess.PIPE,
shell=False,
creationflags = CREATE_NO_WINDOW

这仅适用于 Windows 吗?我需要做一些不同的事情才能让它在 Mac 上运行吗?

谢谢!

【问题讨论】:

我很确定在 POSIX 平台(如 Mac)上,在任何情况下您都不会真正看到控制台。 Cross-platform subprocess with hidden window的可能重复 在那个问题中没有谈论我的参数,只是其他一些startupinfo。希望有人能提供一些启示。 我添加了一个直接解决您列出的所有论点的答案。 【参考方案1】:

stdout=subprocess.PIPE 对控制台是否出现没有影响。它只是确定子进程的stdout 是否被捕获到可以读取的管道中。

shell=False 是所有subprocess 命令的默认值,因此您不需要提供它。它告诉subprocess 是否使用shell 来执行提供的命令。它对控制台是否出现在任何平台上没有任何影响。

creationflags = CREATE_NO_WINDOW 确实会在 Windows 上隐藏控制台(在 Windows 7 上测试,假设为 CREATE_NO_WINDOW == 0x08000000)。但是,在非 Windows 平台上使用它会导致错误。您应该参考 this question 以获取仅在 Windows 上提供 creationflags 的方法,以及隐藏控制台的替代方法。

请注意,出现的控制台应该只是 Windows 上的问题。在 Posix 平台上,控制台不应在运行子进程时出现。

【讨论】:

以上是关于使用 subprocess.Popen 隐藏控制台的主要内容,如果未能解决你的问题,请参考以下文章

subprocess.Popen communication()写入控制台,但不写入日志文件

使用 subprocess.Popen 启动 pyuic5

python subprocess.Popen

python中的subprocess.Popen()使用

如何从 subprocess.Popen 使用 STDIN [重复]

杀死使用 Python 的 subprocess.Popen() 创建的进程 [重复]