2010-08-02 14 views
5

可能重复:
Running a process in pythonw with Popen without a console如何从Python(2.7)中产生的进程中消除Windows控制台?

我使用的是Windows上的Python 2.7自动使用Dcraw执行和PIL批量RAW转换。

问题是我打开一个Windows控制台,每当我运行dcraw(这发生每隔几秒钟)。如果我使用.py作为.py运行脚本,它不那么烦人,因为它只打开主窗口,但我更愿意仅显示GUI。

我涉及它像这样:

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

感谢里卡多·雷耶斯

次版本到配方,在2.7看来,你需要从_subprocessSTARTF_USESHOWWINDOW(你也可以使用pywin32如果你想要的东西可能不太容易改变),所以对于后人:

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

回答

6

您需要在调用Popen时设置startupinfo参数。

下面是一个Activestate.com Recipe一个例子:

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"]) 
相关问题