Nano Hash - криптовалюты, майнинг, программирование

Скрытие консоли при выполнении скрипта в Windows

Как скрыть консоль во время выполнения скрипта? Я хочу сделать для этого отдельную функцию (возможно, применив какие-то методы из os/sys, я не знаю), поэтому мне не нужны какие-то решения вроде изменения расширения скрипта с .py на .pyw.

29.03.2016

  • Какую ОС вы используете? 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

Ответы:


1

Я сделал это в Windows 7, создав ярлык (или ссылку), который запускает мой скрипт с интерпретатором pythonw.exe, у которого нет консоли, вместо стандартного python.exe.

Просто выполните следующие 3 шага:

  1. Сначала создайте обычный ярлык для вашего скрипта. Один из способов сделать это — перетащить значок файла сценария, отображаемый в окне проводника, туда, где вы хотите разместить ярлык (например, на рабочем столе), и удерживать нажатой клавишу Alt при отпускании кнопки мыши. .
  2. Щелкните правой кнопкой мыши только что созданный ярлык и выберите Properties в появившемся меню.
  3. Появится диалоговое окно Свойства для ярлыка. Вставьте в него 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.

29.03.2016
  • Для любого, кто попадает сюда через веб-поиск, свернуть окно — это не то же самое, что скрыть его. Так что, если вы действительно хотите скрыть консоль, см. мой комментарий к самому вопросу. Я ничего не имею против совета в этом ответе, но я думаю, что он лучше подходит для superuser.com. Ясно, что OP доволен сворачиванием окна консоли, но этот ответ был бы лучше (и больше по теме), если бы он показал, как использовать win32com для создания ярлыка оболочки. 30.03.2016
  • @eryksun: На самом деле создание ярлыка, который запускает что-то свернутое, на самом деле не является секретным соусом (или даже необходимым). Настоящая хитрость заключается в том, чтобы запустить pythonw.exe, у которого нет консоли, на конкретном скрипте Python. Так что в этом смысле мой ответ вводит в заблуждение. Использование win32com для создания ярлыка не сработает, потому что скрипт, выполняющий это, сам будет иметь консоль ... так что это похоже на пресловутую проблему курицы и яйца. Мне непонятно, как что-то подобное можно было сделать в самом сценарии, потому что к тому времени уже слишком поздно. 30.03.2016
  • Я не заметил, что вы использовали pythonw.exe. Я думал, что ОП не хочет идти по этому пути, потому что использование .pyw было исключено, что (при условии, что система настроена правильно) фактически то же самое. Но вместо того, чтобы явно передавать командную строку, использование .pyw требует ShellExecuteEx поиска ассоциации .pyw и запуска сценария с помощью pythonw.exe (или pyw.exe). 30.03.2016
  • Вы можете скрыть окно консоли, но сначала оно будет кратковременно мигать на экране, так как Windows создает консоль с видимым окном. К сожалению, ничто в пользовательском интерфейсе не позволяет управлять флагами создания, такими как CREATE_NO_WINDOW или DETACHED_PROCESS. Все, что вы можете сделать, это запустить его в свернутом виде или использовать неконсольный исполняемый файл, такой как pythonw.exe. 30.03.2016
  • @eryksun: Вы просто подтверждаете то, что я имел в виду, говоря, что это проблема курицы и яйца. У меня есть другая идея, которую я изучу и могу опубликовать другой ответ в зависимости от того, что я обнаружу. 30.03.2016
  • user3570029: Я немного изменил свой ответ, поэтому не стесняйтесь не принимать его, если он больше не решает вашу проблему. 30.03.2016

  • 2

    Если вы хотите скрыть окно во время выполнения (и ваш скрипт предназначен только для 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.

    20.04.2018
  • Работает нормально, у меня проблема с приложением, работающим как служба в Windows с использованием библиотеки os, поэтому я меняю его на обычное выполнение с помощью этого, и моя проблема была решена. 04.12.2019

  • 3

    Вы можете запустить программу Python в фоновом режиме, добавив & в конце:

    python myfile.py &
    

    Если вы хотите иметь возможность закрыть консоль и запустить процесс в фоновом режиме, вы можете проверить nohup:

    http://linux.die.net/man/1/nohup

    29.03.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..