web-dev-qa-db-fra.com

Exécutez Python sans que la console Windows apparaisse

Existe-t-il un moyen d'exécuter un script Python dans Windows XP sans qu'une commande Shell n'apparaisse momentanément? J'ai souvent besoin d'automatiser WordPerfect (pour le travail) avec Python, et même si mon script n'a pas de sortie, si je l'exécute depuis sans WP un Shell vide apparaît toujours pendant une seconde avant de disparaître. Y a-t-il un moyen d'empêcher cela? Une sorte de redirection de sortie peut-être?

56
twneale

pythonw.exe exécutera le script sans invite de commande. Le problème est que l'interpréteur Python, Python.exe, est lié au sous-système de console pour produire une sortie de console (puisque cela représente 90% des cas) - pythonw.exe est plutôt lié à l'interface graphique) sous-système, et Windows ne créera pas de fenêtre de sortie de console pour celui-ci, sauf s'il en demande une.

Cet article traite de la programmation GUI avec Python, et fait également allusion à pythonw.exe. Il souligne également que si vos fichiers Python se terminent par .pyw au lieu de .py, le programme d'installation standard de Windows configurera correctement les associations et exécutera votre Python dans pythonw.exe.

Dans votre cas, cela ne ressemble pas à un problème, mais la dépendance à pythonw.exe rend votre application spécifique à Windows - d'autres solutions existent pour y parvenir, par exemple, Mac OS X.

94
Jed Smith

Si vous nommez vos fichiers avec l'extension ".pyw", Windows les exécutera avec l'interpréteur pythonw.exe. Cela n'ouvrira pas la console dos pour exécuter votre script.

25
Peter Shinners

J'ai essayé les méthodes ci-dessus, cependant, une console apparaît et disparaît rapidement en raison d'un temporisateur dans mon script. Enfin, j'ai trouvé le code suivant:

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')
6
W.Leto