Запустить скрипт Python без появления консоли Windows

Есть ли способ запустить сценарий Python в Windows XP без мгновенного появления командной оболочки? Мне часто нужно автоматизировать WordPerfect (для работы) с Python, и даже если мой скрипт не имеет выходных данных, если я выполняю его без WP, пустая оболочка все равно выскакивает на секунду, прежде чем исчезнуть. Есть ли способ предотвратить это? Возможно, какое-то перенаправление вывода?

11 ответов

Решение

pythonw.exe запустит скрипт без командной строки. Проблема в том, что интерпретатор Python, Python.exe, связан с подсистемой консоли для получения вывода консоли (так как это 90% случаев) - вместо этого pythonw.exe связан с подсистемой графического интерфейса, и Windows не будет создавать консоль окно вывода для него, если оно не запрашивает один.

В этой статье обсуждается программирование GUI на Python, а также упоминается pythonw.exe. Также полезно указать, что если ваши файлы Python заканчиваются на .pyw вместо .pyстандартный установщик Windows правильно настроит ассоциации и запустит ваш Python в pythonw.exe.

В вашем случае это не похоже на проблему, но использование pythonw.exe делает ваше приложение специфичным для Windows- существуют другие решения для этого, например, на Mac OS X.

Если вы называете ваши файлы с расширением ".pyw", то Windows выполнит их с помощью интерпретатора pythonw.exe. Это не откроет консоль dos для запуска вашего скрипта.

Это будет работать во всех версиях Windows:

1. Создайте файл « Runner.bat » с помощью Блокнота (или любого другого текстового редактора) и вставьте следующее содержимое:

      @echo off
python server.py

где server.py - это путь к сценарию Python, который вы хотите запустить.

2. Создайте файл « RunScript.vbs » с помощью Блокнота и вставьте следующее содержимое:

      CreateObject("Wscript.Shell").Run "runner.bat",0,True

3. Запустите файл « RunScript.vbs » двойным щелчком, и ваш скрипт Python будет запущен без видимых окон консоли.

ps Я знаю, что это не было частью вашего вопроса, но это часто бывает, если вы хотите запустить скрипт при запуске Windows (после входа в систему), просто вставьте ярлык файла « RunScript.vbs » в папку запуска. (В Windows 10 в основном это: C:\Users[ИМЯ ПОЛЬЗОВАТЕЛЯ]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup )

С наилучшими пожеланиями

Я попробовал методы выше, однако консоль все еще появляется и исчезает из-за таймера в моем скрипте. Наконец, я нашел следующий код:

import ctypes
import os
import win32process

hwnd = ctypes.windll.kernel32.GetConsoleWindow()      
if hwnd != 0:      
    ctypes.windll.user32.ShowWindow(hwnd, 0)      
    ctypes.windll.kernel32.CloseHandle(hwnd)
    _, pid = win32process.GetWindowThreadProcessId(hwnd)
    os.system('taskkill /PID ' + str(pid) + ' /f')

В Win10 довольно просто:
откройте PowerShell и введите следующие команды:

type nul > openWindowed.vbs
type nul > main.py
notepad openWindowed.vbs

Вставьте следующее в файл openWindowed.vbs:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\Users\path\to\main.py" & Chr(34), 0
Set WshShell = Nothing

.Vbs файл будет выполнять ваш main.py файл без открытого ЦМД. Я часто использую это для файлов make.py, потому что не знаю сценариев cmake.

Выключите защитник вашего окна. И установить pyinstaller пакет с использованием pip install pyinstaller .

После установки откройте cmd и введите pyinstaller --onefile --noconsole filename.py

The stanzaхорошо работает через python.exe, но не работает с pythonw.exe. Хуже того, нет реального механизма для вывода наsysoutилиsyserr. Поэтому я написал следующую программу на C# для запуска python без командного окна:

      public class Program
{
  private string python = @"D:\Libs\Python38\Python38_64\python.exe";
  private string args = "mdx_server.py";
  private string wkDir = "D:\\Program Files\\mdx-server";
    
  public static void Main(string[] args) {
    Program app = new Program();
    Console.WriteLine(app.python + " " + app.args + " " + app.wkDir);
    app.Exec();
    Console.WriteLine("Start done!");
  }

  private void runThread() {
    Process process = new Process();
    try {
      process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
      process.StartInfo.Arguments = args;

      process.StartInfo.CreateNoWindow = true;
      process.StartInfo.FileName = python;
      process.StartInfo.WorkingDirectory = wkDir;

      process.StartInfo.UseShellExecute = false;
      process.Start();
    } catch (Exception ex) {
      Console.WriteLine(ex.Message);
    }
  }

  public void Exec() {
    Thread _worker = new Thread(runThread);
    _worker.Start();
  }
}

Измените расширение файла на .pyw и добавьте следующую строку (измененную в соответствии с вашей версией python) в начало вашего скрипта:

      #! c:\\Users\\sohra\\AppData\\Local\\Programs\\Python\\Python38\\pythonw.exe

Теперь, если вы дважды щелкните файл, он будет запущен pythonw.exe без окна консоли.

Когда вы установите Pyinstaller, вы сможете преобразовать .py в .exe. В настройках вы можете изменить, показывать или не показывать окно консоли, которое python открывал при запуске файла.

Я думаю, что в Windows есть 2 варианта :

  • Опция 1

    1. Измените расширение файла на . pywи замените на в самой первой строке следующим образом (не забудьте заменить ):

                #! C:\\Users\\<your_username>\\<your_path_to>\\Scripts\\pythonw.exe
      
    2. Дважды щелкните файл сценария, чтобы запустить его.

    3. При желании вы также можете создать ярлык для .pywфайл, чтобы настроить его имя , значок и сочетание клавиш в качестве окончательного средства запуска !

  • Вариант 2

    1. Оставьте расширение файла и замените pythonw.exeс python.exeв самой первой строке следующим образом (не забудьте заменить <your_username>\\<your_path_to>):

                #! C:\\Users\\<your_username>\\<your_path_to>\\Scripts\\python.exe
      
    2. Используйте файл (Visual Basic Script) со следующим содержимым в качестве средства запуска файла (вы также можете использовать файл для запуска .batфайл без отображения подсказки):

                Set WshShell = CreateObject("WScript.Shell") 
      WshShell.Run "C:\Users\<your_username>\<your_path_to>\Scripts\python.exe C:\Users\<your_username>\<your_path_to>\script.py", 0, True
      Set WshShell = Nothing
      
    3. Дважды щелкните файл, чтобы запустить .pyсценарий.

    4. При желании вы также можете создать ярлык для .vbsфайл, чтобы настроить его имя , значок и сочетание клавиш в качестве окончательного средства запуска !

У меня такая же проблема. Я пробовал много вариантов, и все они не удались. Но я попробовал этот метод, и он волшебным образом сработал!!!!!

Итак, у меня был этот файл python (mod.py) в папке, которую я использовал для запуска из командной строки. Когда я закрывал cmd, графический интерфейс автоматически закрывается.....(SAD), поэтому я запускаю его следующим образом C:\....>pythonw mod.pyНе забывай pythonw "w" - это IMP

Другие вопросы по тегам