使用Popen在没有控制台的情况下在pythonw中运行进程

时间:2009-11-28 21:50:27

标签: python user-interface console popen pythonw

我有一个带有GUI的程序,它通过Popen调用运行外部程序:

p = subprocess.Popen("<commands>" , stdout=subprocess.PIPE , stderr=subprocess.PIPE , cwd=os.getcwd())
p.communicate()

但是无论我做什么,都会弹出一个控制台(我也尝试将NUL传递给文件句柄)。如果没有得到我调用的二进制文件来释放它的控制台,有没有办法做到这一点?

5 个答案:

答案 0 :(得分:28)

来自here

import subprocess

def launchWithoutConsole(command, args):
    """Launches 'command' windowless and waits until finished"""
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    return subprocess.Popen([command] + args, startupinfo=startupinfo).wait()

if __name__ == "__main__":
    # test with "pythonw.exe"
    launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"])

答案 1 :(得分:1)

只做subprocess.Popen([command], shell=True)

答案 2 :(得分:1)

这在win32api中运行良好。其他解决方案对我不起作用。

import win32api
chrome = "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\""
args = "https://stackoverflow.com"

win32api.WinExec(chrome + " " + args)

答案 3 :(得分:0)

您或许可以subprocess.Popen([command], shell=False)

这就是我用的东西。为您节省设置标志和诸如此类的所有废话。 一旦命名为.pyw或使用pythonw运行,它就不应该打开控制台。

答案 4 :(得分:0)

根据Python 2.7 documentationPython 3.7 documentation,您可以通过设置Popen影响creationflags创建流程的方式。特别是CREATE_NO_WINDOW标志对您很有用。

variable = subprocess.Popen(
   "CMD COMMAND", 
   stdout = subprocess.PIPE, creationflags = subprocess.CREATE_NO_WINDOW
)