Убрать консоль при выполнии скрипта

Есть питоновский скрипт. Хочу сделать из него исполняемый файл, который будет запускаться с нужными аргументами через ярлык. Проблема в том, что при запуске открывается виндовая консоль, которая при этом не закрывается автоматически после окончания скрипта! Перепробовал различные варианты: переименовал .py файл в .pyw, собирал с опциями --noconsole и --windowed -- ничего не помогло. Как убрать эту консоль?

Также используется selenium, так что эта консоль может появляться от драйвера браузера. Как её убрать вообще непонятно.


Ответы (1 шт):

Автор решения: mad

Нашёл решение, может кому-то пригодится. Может показаться безумным, но это единственное что у меня работает.

  1. Переименовываем в .pyw, судя по докам pyinstaller автоматически поставит нужные опции.

  2. РЕДАКТИРУЕМ СОРС selenium-а (лучше делать в venv) Lib\site-packages\selenium\webdriver\common\service.py:

Заменяем создание процесса в методе start на это:

self.process = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=False,
                                            creationflags=0x08000000)

Ключевое тут creationflags с константой типа CREATE_NO_WINDOW и shell=False. Остальное, вероятно, можно оставить так, как в вашей текущей версии, но я не пробовал.

  1. Теперь можно собирать (--onefile необязательно, --noconsole ставится автоматически из-за расширения файла):

pyinstaller.exe --onefile script.pyw

В итоге нет ни консоли от скрипта, ни консоли драйвера!

→ Ссылка