Comment cacher une fenêtre de console en python?

j'écris un bot IRC en Python.

je souhaite faire des binaires autonomes pour Linux et Windows de celui-ci. Et surtout je souhaite que lorsque le bot démarre, la fenêtre de la console se cache et que l'utilisateur ne puisse pas voir la fenêtre.

Que puis-je faire pour ça?

54
demandé sur nbro 2009-04-19 05:35:30

6 réponses

il suffit de le sauvegarder avec une extension .pyw . Cela empêchera la fenêtre de la console de s'ouvrir.

sur les systèmes Windows, il n'y a pas de notion de"mode exécutable". L'installateur Python s'associe automatiquement .fichiers py avec python.exe pour 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 la console qui apparaît normalement est supprimée.

explication au bas de la section 2.2.2

83
répondu mdec 2018-03-16 08:13:31

sous linux, lancez-le, pas de problème. Dans Windows,vous voulez utiliser l'exécutable pythonw.

mise à Jour

OK, si je comprends la question dans les commentaires, vous demandez comment faire pour que la fenêtre de commande dans laquelle vous avez démarré le bot à partir de la ligne de commande disparaisse après?

  • UNIX (Linux)

$ nohup mypythonprog &

  • Windows

C:/> démarrer pythonw mypythonprog

je penser c'est le droit. Dans tous les cas, vous pouvez fermer le terminal.

21
répondu Charlie Martin 2009-04-19 01:56:12

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

utilisez nohup mypythonprog & , et vous pouvez fermer la fenêtre du terminal sans perturber le processus. Vous pouvez également lancer exit si vous courez dans le nuage et que vous ne voulez pas laisser un processus d'interpréteur de commandes suspendu.

Sur Les Systèmes Windows

sauvegardez le programme avec une extension .pyw 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 .

16
répondu noɥʇʎԀʎzɐɹƆ 2017-01-16 18:38:35

si tout ce que vous voulez faire est d'exécuter votre Script Python sur un ordinateur windows qui a l'interpréteur Python installé, en convertissant 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 fonctionnerait sur n'importe quelle machine windows, vous devrez faire les changements suivants à votre "setup.py' file.

l'exemple suivant est d'un simple python-GUI faite en utilisant Tkinter:

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

remplacer " console "dans le code ci-dessus par"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.

7
répondu John918 2016-11-25 04:37:27

Quelques informations supplémentaires. pour les situations qui auront besoin de la solution win32gui posté par Mohsen Haddadi plus tôt dans ce fil:

depuis python 361, win32gui & win32con ne font pas partie de la bibliothèque std de python. Pour les utiliser, le paquet pywin32 devra être installé; maintenant possible via pip.

plus d'informations sur le paquet pywin32 est à: comment utiliser le module win32gui avec Python? .

aussi, à appliquer le pouvoir discrétionnaire lors de la fermeture d'une fenêtre afin de ne pas fermer par inadvertance une fenêtre au premier plan, la résolution pourrait ê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
2
répondu Snidhi Sofpro 2018-03-22 12:03:27

cachez votre console. Implémentez ces lignes dans votre code en premier pour commencer à cacher votre console en premier.

import win32gui, win32con

The_program_to_hide = win32gui.GetForegroundWindow()
win32gui.ShowWindow(The_program_to_hide , win32con.SW_HIDE)
2
répondu Mohsen Haddadi 2018-06-04 03:24:07