使用 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()写入控制台,但不写入日志文件