Dieser Artikel teilt Ihnen die Verwendung von Python zum Ausführen von Shell-Skripten und zur dynamischen Übertragung von Parametern sowie die grundlegende Verwendung von Unterprozessen mit.
Ich bin auf diese Situation in den letzten Arbeitsanforderungen gestoßen Die Webseite ruft den Inhalt der Konfigurationsdatei ab und übergibt Parameter dynamisch an das Shell-Skript
Es gibt viele Möglichkeiten, das Shell-Skript auszuführen. Am Ende habe ich mich für den Unterprozess entschieden, die Python-Standardbibliothek
Das Unterprozessmodul ist sehr praktisch. Starten Sie einen untergeordneten Prozess und steuern Sie seine Eingabe und Ausgabe.
Class Popen(args, bufsize = 0, executable=None,
stdin =None, stdout =None, stderr =None ,
preexec_fn = None, close_fds = False, shell = False,
cwd = None, env = None, universal_newlines = False,
Startupinfo = None, Creationflags = 0):
Argumente sind:
args sollte eine Zeichenfolge oder eine Folge von Programmparametern sein. Das auszuführende Programm ist normalerweise das erste Element in der args-Sequenz oder -Zeichenfolge, kann jedoch explizit mithilfe ausführbarer Argumente festgelegt werden.
Unter UNIX mit Shell=False (Standard): In diesem Fall verwendet die POPEN-Klasse os.execvp(), um die Unterroutine auszuführen. args sollte normalerweise eine Sequenz sein. Eine Zeichenfolge wird als Folge von Zeichenfolgen als eindeutige Elemente (auszuführende Programme) behandelt.
Unter UNIX mit Shell=True: Wenn args eine Zeichenfolge ist, gibt es die Befehlszeichenfolge an, die über die Shell ausgeführt werden soll. Wenn args eine Sequenz ist, gibt das erste Element die Befehlszeichenfolge an und alle anderen Elemente werden als zusätzliche Shell-Argumente behandelt.
Sie können zunächst ein einfaches Shell-Skript a.sh erstellen
$1 $2 repräsentieren jeweils den ersten und zweiten Parameter, der an das Skript übergeben wird
Wenn Sie nicht „shell=True“ schreiben, ist der Standardwert „shell=False“. Sie müssen den Executor-Pfad im ersten Parameter von args angeben
bufsize Wenn angegeben, hat bufsize die gleiche Bedeutung wie der entsprechende Parameter der integrierten open()-Funktion: 0 bedeutet keine Pufferung, 1 bedeutet Zeilenpufferung, jeder andere positive Wert bedeutet: Verwenden Sie einen Puffer von (ungefähr) dieser Größe. Eine negative Puffergröße bedeutet die Verwendung des Systemstandards, was normalerweise eine vollständige Pufferung bedeutet. Der Standardwert von bufsize ist 0 (keine Pufferung).
stdin, stdout und stderr geben jeweils die Standardeingabe-, Standardausgabe- und Standardfehlerdatei-Handles des ausgeführten Programms an. Gültige Werte sind PIPE, vorhandener Dateideskriptor (positive Ganzzahl), vorhandenes Dateiobjekt und Keine. PIPE gibt an, dass eine neue Pipe für das Kind erstellt werden soll. Bei „None“ erfolgt keine Umleitung; das Dateihandle der untergeordneten Klasse wird von der übergeordneten Klasse geerbt. Alternativ kann stderr STDOUT sein, was angibt, dass die stderr-Daten der Anwendung im gleichen Dateihandle wie stdout erfasst werden sollen.
Im Popen-Objekt können Sie den Wert subprocess.stdout=PIPE festlegen, dh die Standardausgabe des Prozesses über die Pipe p.stdout.read() herausnehmen
preexec_fn Wenn preexec_fn auf ein aufrufbares Objekt festgelegt ist, wird das Objekt aufgerufen, bevor der untergeordnete Prozess ausgeführt wird.
Wenn close_fds wahr ist, werden alle Dateideskriptoren außer 0, 1 und 2 geschlossen, bevor der untergeordnete Prozess ausgeführt wird.
Wenn Shell wahr ist, wird der angegebene Befehl über die Shell ausgeführt.
Wenn cwd nicht None ist, wird das aktuelle Verzeichnis in cwd geändert, bevor die untergeordneten Elemente ausgeführt werden.
Wenn env nicht None ist, werden Umgebungsvariablen für den neuen Prozess definiert.
Wenn universal_newlines auf true gesetzt ist, werden die Dateiobjekte stdout und stderr als Textdateien geöffnet, können aber n, die Unix-Zeilenabschlusskonvention r, die Macintosh-Konvention oder einen beliebigen Zeilenabschluss in haben Windows-Vereinbarung. Alle diese externen Darstellungen werden vom Python-Programm als n behandelt. Hinweis: Diese Funktion ist nur verfügbar, wenn Python mit universeller Newline-Unterstützung erstellt wurde (Standard). Darüber hinaus werden die Newlines-Eigenschaften der Dateiobjekte stdout, stdin und stderr nicht von der communications()-Methode aktualisiert.
Wenn STARTUPINFO und Creationflags gesetzt sind, werden sie an die zugrunde liegende Funktion CreateProcess() übergeben. Sie können Dinge wie das Erscheinungsbild des Hauptfensters und die Priorität neuer Prozesse festlegen. (Nur Windows)
Einige Methoden des Popen-Objekts
Popen.poll() prüft, ob der untergeordnete Prozess beendet wird und gibt den Rückgabecode des Objekts zurück
Popen.wait() wartet auf den Abschluss des untergeordneten Prozesses und blockiert. Rückgabecode zurückgeben
Popen.communicate(input=None) Geben Sie Informationen in den Prozess ein und lesen Sie Daten aus stdout und stderr, bis das Ende der Datei erreicht ist. Warten Sie, bis der Vorgang abgeschlossen ist. Das optionale stdin-Argument sollte eine Zeichenfolge sein, die an den untergeordneten Prozess gesendet werden soll, oder None, wenn keine Daten an den untergeordneten Prozess gesendet werden sollen.
Gibt ein Tupel (stdout, stderr) zurück, aber die gelesenen Daten werden im Speicher zwischengespeichert. Wenn die Datenmenge also groß oder unendlich ist, verwenden Sie diese Methode nicht
Popen.pid gibt die PID des untergeordneten Prozesses zurück
Popen.returncode liest den Statuscode des Prozesses. Keine – Der untergeordnete Prozess wurde noch nicht beendet. 0 – Der untergeordnete Prozess wird normal beendet > > 0 – Der untergeordnete Prozess wurde abnormal beendet und der Rückgabecode entspricht dem Fehlercode
Popen.kill() beendet den Prozess
Verwandte Empfehlungen:
Rufen Sie Hostnamen und FQDN basierend auf Python Shell ab, um Zweifel auszuräumenbpython Leistungsstarke Python-ShellDas obige ist der detaillierte Inhalt vonVerwenden Sie Python, um Shell-Skripte auszuführen und Parameter und die grundlegende Verwendung von Unterprozessen dynamisch zu übertragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!