Как удалить консоли Windows из порожденных процессов в Python (2.7)?

Возможный дубликат:
Запуск процесса в pythonw с помощью Popen без консоли

Я использую python 2.7 для Windows для автоматизации пакетных конверсий RAW с использованием dcraw и PIL.

Проблема в том, что я открываю консоль Windows всякий раз, когда запускаю dcraw (что происходит каждые пару секунд). Если я запускаю скрипт, используя как .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)) 

Благодаря Рикардо Рейесу

Незначительный пересмотр этого рецепта, в 2.7 кажется, что вам нужно получить STARTF_USESHOWWINDOW из _subprocess (вы также можете использовать pywin32 если хотите что-то, что может быть немного менее склонным к изменению), поэтому для потомков:

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

При вызове 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"])