wake-up-neo.com

Wie versteckt man ein Konsolenfenster in Python?

Ich schreibe einen IRC Bot in Python.

Ich möchte daraus eigenständige Binärdateien für Linux und Windows machen. Und hauptsächlich wünsche ich mir, dass sich das Konsolenfenster beim Start des Bots versteckt und der Benutzer das Fenster nicht sehen kann.

Was kann ich dafür tun?

62
Godwin Austin

Speichern Sie es einfach mit einem .pyw Erweiterung. Dadurch wird das Öffnen des Konsolenfensters verhindert.

Auf Windows-Systemen gibt es keine Vorstellung von einem "ausführbaren Modus". Das Python -Installationsprogramm ordnet py-Dateien automatisch python.exe zu, sodass es bei einem Doppelklick auf eine Python= -Datei als Skript ausgeführt wird. Die Erweiterung kann auch .pyw sein. In diesem Fall wird das normalerweise angezeigte Konsolenfenster unterdrückt.

Erklärung unten in Abschnitt 2.2.2

96
mdec

Unter Linux einfach ausführen, kein Problem. Unter Windows möchten Sie die ausführbare Datei pythonw verwenden.

Aktualisieren

Okay, wenn ich die Frage in den Kommentaren verstehe, fragst du, wie das Befehlsfenster, in dem du den Bot über die Befehlszeile gestartet hast, danach ausgeblendet wird?

  • UNIX (Linux)

$ Nohup mypythonprog &

  • Windows

C: /> starte pythonw mypythonprog

Ich denke nach das stimmt. In jedem Fall können Sie jetzt das Terminal schließen.

29
Charlie Martin

Auf Unix-Systemen (einschließlich Linux, macOS und BSD)

Verwenden Nohup mypythonprog &, und Sie können das Terminalfenster schließen, ohne den Vorgang zu unterbrechen. Sie können exit auch ausführen, 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 einem .pyw Erweiterung und jetzt wird es geöffnet mit pythonw.exe. Kein Shell-Fenster.

Wenn Sie zum Beispiel foo.py, du musst es umbenennen in foo.pyw.

17

Wenn Sie nur das Skript Python auf einem Windows-Computer ausführen möchten, auf dem der Python Interpreter installiert ist, konvertieren Sie die Erweiterung Ihres gespeicherten Skripts von '. py 'to' .pyw 'sollte den Trick machen.

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 der 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 "console" 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.

10
John918

Dadurch wird Ihre Konsole ausgeblendet. Implementieren Sie diese Zeilen zuerst in Ihren Code, um Ihre Konsole zunächst auszublenden.

import win32gui, win32con

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

Einige zusätzliche Informationen. Für Situationen, in denen die von Mohsen Haddadi zuvor in diesem Thread veröffentlichte win32gui-Lösung benötigt wird:

Ab python 361 sind win32gui & win32con nicht Teil der python std-Bibliothek. Um sie zu verwenden, muss das pywin32-Paket installiert werden. Jetzt ist dies über möglich Pip.

Weitere Hintergrundinformationen zum pywin32-Paket finden Sie unter: Wie verwende ich das win32gui-Modul mit Python? .

Um beim Schließen eines Fensters Diskretion anzuwenden, um nicht versehentlich ein Fenster im Vordergrund zu schließen, kann die Auflösung folgendermaßen 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
4
Snidhi Sofpro