Запуск команд оболочки без окна оболочки

С subprocess.call или subprocess.Popen выполнение команды оболочки заставляет окно оболочки быстро появляться и исчезать.

Как я могу запустить команду оболочки без окна оболочки?


person aF.    schedule 29.05.2010    source источник
comment
Какая платформа? (Похоже на Windows.)   -  person    schedule 29.05.2010
comment


Ответы (1)


Я полагаю, что ваше наблюдение ограничено Windows, поскольку я считаю, что это единственная платформа, на которой вы столкнетесь с проблемой «консольной вспышки». Если это так, то docs предлагают следующие полу- полезный абзац:

Флаги startupinfo и creation, если они заданы, будут переданы базовой функции CreateProcess (). Они могут указывать такие вещи, как внешний вид главного окна и приоритет нового процесса. (Только для Windows)

К сожалению, онлайн-документы Python не воспроизводят соответствующую часть документов Windows API, поэтому вам нужно найти их в другом месте, например начиная с здесь в MSDN, что ведет к здесь для creationflags и, в частности,

CREATE_NO_WINDOW
0x08000000

Процесс представляет собой консольное приложение, которое запускается без окна консоли. Следовательно, дескриптор консоли для приложения не установлен.

Итак, добавление creationflags=0x08000000 к вашему Popen вызову должно помочь (к сожалению, у меня нет компьютера под управлением Windows, на котором можно это опробовать, поэтому вам придется попробовать это самостоятельно).

person Alex Martelli    schedule 29.05.2010
comment
Проверено на машине с Windows. Спасибо! - person Mike Ottum; 20.10.2011