如何在Python (2.7)中消除生成进程中的Windows控制台?
可能重复的问题:
在没有控制台的情况下使用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"])