Запустить скрипт 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
Измените расширение файла на .
pyw
и замените на в самой первой строке следующим образом (не забудьте заменить ):#! C:\\Users\\<your_username>\\<your_path_to>\\Scripts\\pythonw.exe
Дважды щелкните файл сценария, чтобы запустить его.
При желании вы также можете создать ярлык для
.pyw
файл, чтобы настроить его имя , значок и сочетание клавиш в качестве окончательного средства запуска !
Вариант 2
Оставьте расширение файла и замените
pythonw.exe
сpython.exe
в самой первой строке следующим образом (не забудьте заменить<your_username>\\<your_path_to>
):#! C:\\Users\\<your_username>\\<your_path_to>\\Scripts\\python.exe
Используйте файл (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
Дважды щелкните файл, чтобы запустить
.py
сценарий.При желании вы также можете создать ярлык для
.vbs
файл, чтобы настроить его имя , значок и сочетание клавиш в качестве окончательного средства запуска !
У меня такая же проблема. Я пробовал много вариантов, и все они не удались. Но я попробовал этот метод, и он волшебным образом сработал!!!!!
Итак, у меня был этот файл python (mod.py) в папке, которую я использовал для запуска из командной строки. Когда я закрывал cmd, графический интерфейс автоматически закрывается.....(SAD), поэтому я запускаю его следующим образом
C:\....>pythonw mod.py
Не забывай pythonw
"w" - это IMP