如何在Python (2.7)中消除生成进程中的Windows控制台?

6 投票
1 回答
2850 浏览
提问于 2025-04-16 02:12

可能重复的问题:
在没有控制台的情况下使用pythonw和Popen运行进程

我在Windows上使用python 2.7来自动批量转换RAW文件,使用的是dcraw和PIL。

问题是每次运行dcraw时,都会打开一个Windows控制台(这个过程每隔几秒就会发生一次)。如果我用.py文件运行脚本,虽然只会打开主窗口,感觉没那么烦人,但我更希望只显示图形界面。

我这样调用它:

args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile]
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE)
ppm_data, err = proc.communicate()
image = Image.open(StringIO.StringIO(ppm_data))

感谢Ricardo Reyes

对这个方法做了小修改,在2.7版本中,似乎需要从<_subprocess>中获取STARTF_USESHOWWINDOW(如果你想要一个可能不太容易变动的选项,也可以使用pywin32),所以为了记录下来:

suinfo = subprocess.STARTUPINFO()
suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo)

1 个回答

7

在调用 Popen 时,你需要设置 startupinfo 这个参数。

下面是来自 Activestate.com 的一个示例

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"])

撰写回答