· 

cmd-Befehle mit Python ausführen

1. Einführung

Wenn man eine "richtige" (Skript-)Programmiersprache gelernt hat, dann wird man an der Syntax und den beschränkten Möglichkeiten von batch-Skripten vermutlich wohl wenig Attraktives finden. Deshalb möchte ich dir zeigen, wie du mit Python sehr leicht Konsolenbefehle ausführen kannst. Hierfür benötigst du sogar nur ein Modul und kannst damit sowohl unter Windows, als auch unter Linux Konsolenbefehle absetzen.


2. Subprocess

Du benötigst zunächst das Modul subprocess. Diese ist in Python 3 bereits vorinstalliert, d. h. du kannst subprocess direkt verwenden ohne es zuvor über pip oder manuell nachladen zu müssen. Man kann auch mit dem Modul os und der Funktion popen arbeiten, doch diese Variante ist veraltet und sollte vermieden werden.

import subprocess

Um einen Konsolenbefehl ausführen zu können, musst du auf subprocess die Funktion call aufrufen. Dieser übergibst du als Argument in Form eines einfachen Strings den Befehl, den du ausführen möchtest, also z. B. start

subprocess.call("start")

Die Frage ist nun, was gestartet werden soll. Wenn du Firefox installiert hast, könntest du als Test den Firefox-Browser starten. Wir schreiben innerhalb des Strings hinter den Befehl start noch firefox

subprocess.call("start firefox")

Wenn du den Befehl so startest, dann wird das Programm allerdings eine Fehlermeldung liefern. Das liegt daran, dass wenn Parameter vorhanden sind, ein einfacher String nicht ausreicht. Dann muss der Befehl samt Parametern als Liste übergeben werden. Wenn du doch alles als einen String übergeben möchtest, dann benötigst du als weiteren Parameter shell=True. Es wird aus Sicherheitsgründen jedoch empfohlen, diese Variante nicht zu nutzen. Sie würde aber funktionieren. Unter Windows ist dieses Argument auf jeden Fall erforderlich!

subprocess.call("start firefox", shell=True)

Viel besser ist aber die bereits angesprochene Variante über eine Liste. Wir schmeißen also den Parameter shell wieder raus und übergeben statt eines einzelnen Arguments nun eine Liste von Argumenten.

subprocess.call(["start","firefox"])

Du könntest jetzt noch weitere Parameter hinzufügen, wie z. B. eine bestimmte Url, die beim Starten des Firefox aufgerufen werden soll. Rufen wir doch exemplarisch mal meine Fragenplattform informatikstudium.net beim Starten des Firefox auf. 

subprocess.call(["start","firefox","www.informatikstudium.net"])

Wenn du das Skript unter Windows ausführen möchtest, dann solltest du auf jeden Fall das Argument shell=True mitgeben.

Es gibt zahlreiche Alternativen für den Aufruf von Konsolenbefehlen aus Python heraus. Viele davon haben aber unschöne Nebeneffekte, wie etwa die Fehlermeldung

Ein Prozess hat versucht, zu einer nicht bestehenden Pipe zu schreiben

Das tritt bspw. beim Versuch auf, popen beim Modul os zu nutzen.