Ich schreibe einen IRC-Bot in Python.
Ich möchte daraus eigenständige Binärdateien für Linux und Windows erstellen. Und hauptsächlich wünsche ich mir, dass beim Starten des Bots das Konsolenfenster ausgeblendet wird und der Benutzer das Fenster nicht sehen kann.
Was kann ich dafür tun?
Antworten:
Speichern Sie es einfach mit einer
.pyw
Erweiterung. Dadurch wird verhindert, dass sich das Konsolenfenster öffnet.Erläuterung am Ende von Abschnitt 2.2.2
quelle
Führen Sie es unter Linux einfach aus, kein Problem. In Windows möchten Sie die ausführbare Datei pythonw verwenden.
Aktualisieren
Okay, wenn ich die Frage in den Kommentaren verstehe, fragen Sie, wie das Befehlsfenster, in dem Sie den Bot über die Befehlszeile gestartet haben, danach ausgeblendet wird?
Ich denke das ist richtig. In jedem Fall können Sie jetzt das Terminal schließen.
quelle
Auf Unix-Systemen (einschließlich GNU / Linux, macOS und BSD)
Verwenden Sie
nohup mypythonprog &
, und Sie können das Terminalfenster schließen, ohne den Prozess zu stören. Sie können auch ausgeführt werden,exit
wenn Sie in der Cloud ausgeführt werden und keinen hängenden Shell-Prozess verlassen möchten.Auf Windows-Systemen
Speichern Sie das Programm mit einer
.pyw
Erweiterung und jetzt wird es mit geöffnetpythonw.exe
. Kein Shell-Fenster.Wenn Sie dies beispielsweise getan haben
foo.py
, müssen Sie es in umbenennenfoo.pyw
.quelle
Dadurch wird Ihre Konsole ausgeblendet. Implementieren Sie diese Zeilen zuerst in Ihren Code, um zunächst Ihre Konsole auszublenden.
import win32gui, win32con the_program_to_hide = win32gui.GetForegroundWindow() win32gui.ShowWindow(the_program_to_hide , win32con.SW_HIDE)
Update Mai 2020:
Wenn Sie Probleme mit der
pip install win32con
Eingabeaufforderung haben, können Sie einfach.pip install pywin32
Dann in Ihrem Python-Skript ausführenimport win32.lib.win32con as win32con
anstattimport win32con
.Das erneute Anzeigen Ihres Programms
win32con.SW_SHOW
funktioniert einwandfrei:quelle
Wenn Sie Ihr Python-Skript nur auf einem Windows-Computer ausführen möchten, auf dem der Python-Interpreter installiert ist, sollte die Konvertierung der Erweiterung Ihres gespeicherten Skripts von ".py" in ".pyw" ausreichen.
Wenn Sie jedoch py2exe verwenden, um Ihr Skript in eine eigenständige Anwendung zu konvertieren, die auf jedem Windows-Computer ausgeführt werden kann, müssen Sie die folgenden Änderungen an Ihrer Datei "setup.py" vornehmen.
Das folgende Beispiel zeigt eine einfache Python-GUI, die mit Tkinter erstellt wurde:
from distutils.core import setup import py2exe setup (console = ['tkinter_example.pyw'], options = { 'py2exe' : {'packages':['Tkinter']}})
Ändern Sie "Konsole" im obigen Code in "Windows".
from distutils.core import setup import py2exe setup (windows = ['tkinter_example.pyw'], options = { 'py2exe' : {'packages':['Tkinter']}})
Dadurch wird nur die von Tkinter generierte Benutzeroberfläche und kein Konsolenfenster geöffnet.
quelle
Einige zusätzliche Informationen. für Situationen, in denen die von Mohsen Haddadi weiter oben in diesem Thread veröffentlichte win32gui-Lösung erforderlich ist:
Ab Python 361 sind win32gui und win32con nicht Teil der Python-Standardbibliothek. Um sie zu verwenden, muss das pywin32-Paket installiert sein. jetzt über pip möglich.
Weitere Hintergrundinformationen zum pywin32-Paket finden Sie unter: Wie verwende ich das win32gui-Modul mit Python? .
Um beim Schließen eines Fensters Diskretion zu walten und kein Fenster im Vordergrund versehentlich zu schließen, kann die Auflösung wie folgt erweitert werden:
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
quelle
import os,sys
if sys.args[-1]!='Y': os.system('pythonw myprog.py Y') # or whatever your program's name is
# Your program's code