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?
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.
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.
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
.
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.
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)
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