J'ai écrit quelques déclarations comme ci-dessous :
os.system(cmd) #do something
subprocess.call('taskkill /F /IM exename.exe')
les deux feront apparaître une console.
Comment puis-je l'empêcher de faire apparaître la console ?
J'ai écrit quelques déclarations comme ci-dessous :
os.system(cmd) #do something
subprocess.call('taskkill /F /IM exename.exe')
les deux feront apparaître une console.
Comment puis-je l'empêcher de faire apparaître la console ?
Le processus STARTUPINFO
permet de masquer la fenêtre de la console :
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
#si.wShowWindow = subprocess.SW_HIDE # default
subprocess.call('taskkill /F /IM exename.exe', startupinfo=si)
Ou définissez les drapeaux de création pour désactiver la création de la fenêtre :
CREATE_NO_WINDOW = 0x08000000
subprocess.call('taskkill /F /IM exename.exe', creationflags=CREATE_NO_WINDOW)
Le processus ci-dessus est toujours un processus de console avec des handles valides pour les E/S de la console (vérifié en appelant GetFileType
sur les poignées retournées par GetStdHandle
). Il n'a simplement pas de fenêtre et n'hérite pas de la console du parent, le cas échéant.
Vous pouvez aller encore plus loin en obligeant l'enfant à ne pas avoir de console du tout :
DETACHED_PROCESS = 0x00000008
subprocess.call('taskkill /F /IM exename.exe', creationflags=DETACHED_PROCESS)
Dans ce cas, les poignées standard de l'enfant (c.-à-d. GetStdHandle
) sont 0, mais vous pouvez les définir sur un fichier disque ouvert ou un pipe tel que subprocess.DEVNULL
(3.3) ou subprocess.PIPE
.
Bien sûr, la technique de startupinfo fonctionne, mais celle-ci est plus courte (mais mettez un commentaire pour indiquer pourquoi vous utilisez shell=True
sinon cela ne serait probablement pas aussi évident).
Hmm, pour une raison quelconque, mon exécutable ne fonctionne pas lorsqu'on utilise shell=True
. Mais il fonctionne très bien en utilisant startupinfo.
Désolé, le truc que je veux invoquer ne peut pas être exécuté par subprocess.Popen, car une exception est levée "invalid win32 app". Mais os.system peut l'exécuter sans aucun avertissement.
Er, ce n'est pas un problème avec subprocess ; je peux le faire tourner sous Windows 7, en natif (Python 2.7.2) ainsi que sous Cygwin (Python 2.6.5), sans aucun avertissement.
Bonjour, veuillez fournir des explications supplémentaires pour expliquer comment cela répond à la question. Merci.
Il s'agit en fait d'un fichier d'interface utilisateur Python. Il ouvre une nouvelle fenêtre sans ligne de commande. Regardez ce lien ( filext.com/file-extension/PYW )
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Essayez d'utiliser
spawn
famille à la place.1 votes
Liés : Exécution d'un processus en pythonw avec Popen sans console