Voer het Python-script uit zonder dat de Windows-console verschijnt

Is er een manier om een ​​Python-script in Windows XP uit te voeren zonder dat er tijdelijk een opdrachtshell verschijnt? Ik moet WordPerfect (voor werk) vaak automatiseren met Python, en zelfs als mijn script geen uitvoer heeft, als ik het zonder WP uitvoer, verschijnt er nog steeds een lege shell voor een seconde voordat het verdwijnt. Is er een manier om dit te voorkomen? Een soort van uitvoeromleiding misschien?


Antwoord 1, autoriteit 100%

pythonw.exe voert het script uit zonder een opdrachtprompt. Het probleem is dat de Python-interpreter, Python.exe, is gekoppeld aan het console-subsysteem om console-uitvoer te produceren (aangezien dat 90% van de gevallen is) – pythonw.exe is in plaats daarvan gekoppeld aan het GUI-subsysteem en Windows zal geen console maken uitvoervenster ervoor, tenzij het erom vraagt.

Dit artikelbespreekt GUI programmeren met Python, en verwijst ook naar pythonw.exe. Het wijst er ook handig op dat als uw Python-bestanden eindigen op .pywin plaats van .py, het standaard Windows-installatieprogramma de koppelingen correct instelt en uw Python uitvoert in pythonw.exe .

In jouw geval klinkt het niet als een probleem, maar het vertrouwen op pythonw.exe maakt je applicatie Windows-specifiek — er zijn andere oplossingen om dit te bereiken op bijvoorbeeld Mac OS X.


Antwoord 2, autoriteit 28%

Als u uw bestanden een naam geeft met de extensie “.pyw”, zal Windows ze uitvoeren met de pythonw.exe-interpreter. Hierdoor wordt de dos-console niet geopend om uw script uit te voeren.


Antwoord 3, autoriteit 6%

Ik heb de bovenstaande methoden geprobeerd, maar er verschijnt nog steeds een console en deze verdwijnt snel vanwege een timer in mijn script. Eindelijk vond ik de volgende code:

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')

Antwoord 4, autoriteit 2%

Heel eenvoudig in Win10:
Open een PowerShell en typ deze opdrachten:

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

Plak de volgende in uw openWindowed.vbs-bestand:

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

Het .vbsbestand zal uw main.pybestand uitvoeren zonder een cmd te openen. Ik gebruik dit veel voor de make.py-bestanden, omdat ik cmake-scripting niet ken.


Antwoord 5, autoriteit 2%

Dit werkt op alle Windows-versies:

1.Maak een “Runner.bat“-bestand met Kladblok (of een andere teksteditor) en voeg de volgende inhoud in:

@echo off
python server.py

waarbij server.pyhet pad is van het Python-script dat u wilt uitvoeren.

2.Maak het bestand “RunScript.vbs” aan met Kladblok en voeg de volgende inhoud in:

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

3.Voer het bestand “RunScript.vbs” uit met dubbelklik en uw Python-script wordt uitgevoerd zonder zichtbare consolevensters

ps. Ik weet dat dit geen deel uitmaakte van uw vraag, maar het is vaak het geval, als u het script bij het starten van Windows wilt uitvoeren (nadat de gebruiker zich heeft aangemeld), plakt u gewoon de snelkoppeling van het bestand “RunScript.vbs” in uw opstartmap. (Op Windows 10 meestal onder: C:\Users[USERNAME]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)

Met vriendelijke groeten


Antwoord 6

Verander de bestandsextensie in .pyw en voeg de volgende regel (dienovereenkomstig gewijzigd aan uw python-versie) toe aan het begin van uw script:

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

Als u nu dubbelklikt op het bestand, wordt het uitgevoerd door pythonw.exe zonder het consolevenster.


Antwoord 7

Zet je raambeveiliging uit. En installeer het pakket pyinstallermet behulp van pip install pyinstaller.

Na installatie open cmd en typ pyinstaller --onefile --noconsole filename.py


Antwoord 8

Ik had hetzelfde probleem. Ik heb veel opties geprobeerd, en ze zijn allemaal mislukt
Maar ik heb deze methode geprobeerd en het werkte op magische wijze!!!!!

Dus ik had dit python-bestand (mod.py) in een map, die ik altijd uitvoerde met de opdrachtprompt
Toen ik de cmd sloot, wordt de gui automatisch gesloten…..(SAD),
Dus ik voer het als volgt uit:
C:\....>pythonw mod.py
Vergeet niet pythonw“w” is IMP


Antwoord 9

Er zijn 2 optiesin Windows, denk ik:

  • Optie 1

    1. Verander de bestandsextensie .pyin .pywen vervang python.exedoor pythonw.exeop de allereerste regel als volgt (zorg ervoor dat u <your_username>\\<your_path_to>vervangt):

      #! C:\\Users\\<your_username>\\<your_path_to>\\Scripts\\pythonw.exe
      
    2. Dubbelklik op het .pywscriptbestand om het uit te voeren.

    3. Optioneel kunt u ook een snelkoppelingnaar .pyw-bestand maken om de naam, pictogramen sneltoetsals laatste opstartprogramma!

  • Optie 2

    1. Verlaat de bestandsextensie .pyen vervang pythonw.exedoor python.exeop de allereerste regel als volgt ( zorg ervoor dat u <your_username>\\<your_path_to>vervangt):

      #! C:\\Users\\<your_username>\\<your_path_to>\\Scripts\\python.exe
      
    2. Gebruik een .vbs(Visual Basic Script)-bestand met de volgende inhoud als opstartprogramma van het .py-bestand (u kunt een .vbs-bestand om ook een .bat-bestand te starten zonder de prompt weer te geven):

      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. Dubbelklik op het .vbs-bestand om uw .py-script uit te voeren.

    4. Optioneel kunt u ook een snelkoppelingnaar .vbs-bestand maken om de naam, pictogramen sneltoetsals laatste opstartprogramma!

Other episodes