cmd command mit python silent ausführen?
hallo, ich versuche ein programm in python zu schreiben dass einen windows cmd befehl ausführt, ohne dass dabei das cmd befehlsfenster für kurze zeit sichtbar ist (also dass der befehl im hintergrund asgeführt wird) in java ist dies mit Runtime.getRuntime().exec("//befehl"); möglich, nun frage ich mich ob es sowas auch für python gibt, oder eine möglichkeit wenn man das ganze über os.system() ausführt so zu machen, dass das befehlsfenster nicht sichtbar ist also silent ist. und ich kompiliere die pyhon datei nacher mit pyinstaller zu einer exe datei
1 Antwort
Ja, es gibt mehrere Möglichkeiten, einen Windows-Befehl in Python im Hintergrund auszuführen, ohne dass das Befehlsfenster sichtbar wird. Eine Möglichkeit besteht darin, die
subprocess
-Bibliothek zu verwenden, die in Python enthalten ist. Sie können die
subprocess.Popen()
-Funktion verwenden, um einen Befehl im Hintergrund auszuführen.
Hier ist ein Beispiel:
import subprocess
subprocess.Popen("befehl", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
In diesem Beispiel wird der Befehl "befehl" im Hintergrund ausgeführt und das Befehlsfenster wird nicht angezeigt.
Eine andere Möglichkeit besteht darin, das
os.system()
-Modul zu verwenden und das Ausgabefenster zu unterdrücken, indem Sie
start /b
vor den Befehl setzen.
import os
os.system("start /b befehl")
Das Befehlsfenster wird hier nicht angezeigt und der Befehl wird im Hintergrund ausgeführt.
Wichtig zu beachten ist das, wenn Sie das Programm mit Pyinstaller kompilieren, das einige Einstellungen beachtet werden müssen, damit das erwartete Ergebnis erreicht wird, wie z.B. das Verwenden der
--noconsole
-Option, um das Konsolenfenster zu unterdrücken.
Es gibt auch andere Möglichkeiten wie
ctypes
oder
win32api
welche auch verwendet werden können. Es hängt davon ab, welche Funktionalität und welche Anforderungen Sie für Ihr Programm haben.
Darf ich raten? Du hast diese Antwort von ChatGPT kopiert, ohne selbst auch nur ein Wort davon zu verstehen.
import subprocess
subprocess.Popen("befehl", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
shell=True macht die Sache nur unnötig kompliziert und unsicher. Und subprocess.PIPE ist nur nötig, wenn man die Ein- und Ausgabe kontrollieren will.
Und seit Python 3.5 wird subprocess.run() empfohlen, solange man keine spezielle Funktionalität von Popen braucht. Also einfach:
subprocess.run( "befehl" )