Как скрыть консоль во время выполнения скрипта? Я хочу сделать для этого отдельную функцию (возможно, применив какие-то методы из os
/sys
, я не знаю), поэтому мне не нужны какие-то решения вроде изменения расширения скрипта с .py
на .pyw
.
Скрытие консоли при выполнении скрипта в Windows
- Какую ОС вы используете? 29.03.2016
- @martineau, Windows 8, поэтому советы вроде nohup или & не имеют смысла 29.03.2016
- Надеюсь, ты не сможешь этого сделать. Что, если кто-то запустит скрипт в эмуляторе терминала с открытыми другими вкладками? Будут ли другие вкладки также скрыты? 29.03.2016
- Вы можете скрыть консоль, используя ctypes, с
kernel32.GetConsoleWindow
иuser32.ShowWindow
, но вам следует скрывать только новую консоль. Еслиkernel32.GetConsoleProcessList
имеет больше, чем py.exe и python.exe, не скрывайте окно, если вы не хотите, чтобы кто-то вас ненавидел. 30.03.2016
Ответы:
Я сделал это в Windows 7, создав ярлык (или ссылку), который запускает мой скрипт с интерпретатором pythonw.exe
, у которого нет консоли, вместо стандартного python.exe
.
Просто выполните следующие 3 шага:
- Сначала создайте обычный ярлык для вашего скрипта. Один из способов сделать это — перетащить значок файла сценария, отображаемый в окне проводника, туда, где вы хотите разместить ярлык (например, на рабочем столе), и удерживать нажатой клавишу Alt при отпускании кнопки мыши. .
- Щелкните правой кнопкой мыши только что созданный ярлык и выберите
Properties
в появившемся меню. - Появится диалоговое окно Свойства для ярлыка. Вставьте в него
C:\python27\pythonw.exe
и пробел перед путем к файлу вашего скрипта. если в пути к вашему скрипту есть пробелы, теперь он должен быть заключен в двойные кавычки._ Если вы используете другую версию Python, вы также необходимо изменитьPython27
соответственно.
т. е. цель D:\path with spaces in it to\myscript.py
должна быть изменена
to C:\Python27\pythonw.exe "D:\path with spaces in it to\myscript.py"
Вы также можете изменить значок ярлыка здесь, если хотите.
Вот пример:
Обновить – более простой способ: вы также можете изменить расширение вашего скрипта на .pyw
, что заставит его запускаться с pythonw.exe
вместо python.exe
.
Если вы хотите скрыть окно во время выполнения (и ваш скрипт предназначен только для Windows), тогда ctypes может быть возможностью для вас.
Используя этот ответ, вы можете ввести данные, а затем скрыть их:
import ctypes
a = input('Input value here:')
kernel32 = ctypes.WinDLL('kernel32')
user32 = ctypes.WinDLL('user32')
SW_HIDE = 0
hWnd = kernel32.GetConsoleWindow()
user32.ShowWindow(hWnd, SW_HIDE)
# Do stuff here
Это убегает C ShowWindow()
. Вы можете получить более подробную информацию из собственной документации Windows.
Вы можете запустить программу Python в фоновом режиме, добавив & в конце:
python myfile.py &
Если вы хотите иметь возможность закрыть консоль и запустить процесс в фоновом режиме, вы можете проверить nohup:
http://linux.die.net/man/1/nohup
win32com
для создания ярлыка оболочки. 30.03.2016pythonw.exe
, у которого нет консоли, на конкретном скрипте Python. Так что в этом смысле мой ответ вводит в заблуждение. Использованиеwin32com
для создания ярлыка не сработает, потому что скрипт, выполняющий это, сам будет иметь консоль ... так что это похоже на пресловутую проблему курицы и яйца. Мне непонятно, как что-то подобное можно было сделать в самом сценарии, потому что к тому времени уже слишком поздно. 30.03.2016ShellExecuteEx
поиска ассоциации .pyw и запуска сценария с помощью pythonw.exe (или pyw.exe). 30.03.2016CREATE_NO_WINDOW
илиDETACHED_PROCESS
. Все, что вы можете сделать, это запустить его в свернутом виде или использовать неконсольный исполняемый файл, такой как pythonw.exe. 30.03.2016