web-dev-qa-db-fra.com

Comment masquer la fenêtre de la console en python?

J'écris un IRC bot en Python.

Je souhaite en faire des binaires autonomes pour Linux et Windows. Et surtout, je souhaite que lorsque le bot démarre, la fenêtre de la console doit se cacher et l'utilisateur ne doit pas pouvoir voir la fenêtre.

Que puis-je faire pour ça?

62
Godwin Austin

Enregistrez-le simplement avec un .pyw extension. Cela empêchera la fenêtre de la console de s'ouvrir.

Sur les systèmes Windows, il n’existe aucune notion de "mode exécutable". Le programme d'installation Python associe automatiquement les fichiers .py à python.exe afin qu'un double-clic sur un fichier Python l'exécute comme un script. L'extension peut également être .pyw, dans ce cas, la fenêtre de console qui apparaît normalement est supprimée.

Explication au bas de la section 2.2.2

96
mdec

Sur les systèmes Unix (y compris Linux, macOS et BSD)

Utilisation Nohup mypythonprog &, et vous pouvez fermer la fenêtre du terminal sans interrompre le processus. Vous pouvez également exécuter exit si vous exécutez dans le cloud et que vous ne souhaitez pas laisser un processus Shell suspendu.

Sur les systèmes Windows

Enregistrez le programme avec un .pyw extension et maintenant il s'ouvrira avec pythonw.exe. Pas de fenêtre Shell.

Par exemple, si vous avez foo.py, vous devez le renommer en foo.pyw.

17
noɥʇʎԀʎzɐɹƆ

Si tout ce que vous voulez faire est d'exécuter votre script Python sur un ordinateur Windows sur lequel l'interpréteur Python est installé, convertissez l'extension de votre script enregistré à partir de '. py 'to' .pyw 'devrait faire l'affaire.

Mais si vous utilisez py2exe pour convertir votre script en une application autonome qui s'exécuterait sur n'importe quelle machine Windows, vous devrez apporter les modifications suivantes à votre fichier 'setup.py'.

L'exemple suivant est une interface graphique python simple créée à l'aide de Tkinter:

from distutils.core import setup
import py2exe
setup (console = ['tkinter_example.pyw'],
       options = { 'py2exe' : {'packages':['Tkinter']}})

Changez "console" dans le code ci-dessus en "windows".

from distutils.core import setup
import py2exe
setup (windows = ['tkinter_example.pyw'],
       options = { 'py2exe' : {'packages':['Tkinter']}})

Cela n'ouvrira que l'interface graphique générée par Tkinter et aucune fenêtre de console.

10
John918

Cela masquera votre console. Implémentez d'abord ces lignes dans votre code pour commencer par masquer votre console.

import win32gui, win32con

The_program_to_hide = win32gui.GetForegroundWindow()
win32gui.ShowWindow(The_program_to_hide , win32con.SW_HIDE)
7
Mohsen Haddadi

Quelques informations supplémentaires. pour les situations qui nécessiteront la solution win32gui publiée par Mohsen Haddadi plus tôt dans ce fil:

À partir de python 361, win32gui & win32con ne font pas partie de la bibliothèque python std. Pour les utiliser, le paquet pywin32 devra être installé; désormais possible via pépin.

Plus d'informations sur le paquet pywin32 sont disponibles sur: Comment utiliser le module win32gui avec Python? .

De plus, pour appliquer une discrétion lors de la fermeture d'une fenêtre afin de ne pas fermer par inadvertance une fenêtre au premier plan, la résolution peut être étendue selon les lignes suivantes:

try     :

    import win32gui, win32con;

    frgrnd_wndw = win32gui.GetForegroundWindow();
    wndw_title  = win32gui.GetWindowText(frgrnd_wndw);
    if wndw_title.endswith("python.exe"):
        win32gui.ShowWindow(frgrnd_wndw, win32con.SW_HIDE);
    #endif
except  :
    pass
4
Snidhi Sofpro