Der Subprozess.Methode ausführen
Der Subprozess.Die Auslaufmethode enthält eine Liste von Argumenten. Wenn die Methode aufgerufen wird, führt sie den Befehl aus und wartet, bis der Prozess fertiggestellt wird. Das Objekt „FerasteProcess“ gibt STDOut, STDERR, ursprüngliche Argumente zurück, die beim Aufrufen der Methode verwendet werden, und einen Rückgaberodus. STDOut bezieht sich auf den vom Befehl erstellten Datenstrom, während Stderr auf alle während der Ausführung des Programms angesprochenen Fehler bezieht. Jeder Rückgabecode ungleich Null (Exit-Code) würde einen Fehler bedeuten, wenn der Befehl im Unterprozess ausgeführt wird.Methode ausführen.
Beispiel 1: Ausgabeinhalt einer Textdatei mit dem Subprozess ausgeben.Methode ausführen
Der folgende Befehl gibt den Inhalt einer „Daten aus.txt ”-Datei unter der Annahme, dass sie eine Zeichenfolge„ name = John “enthält.
Subprozess importierenDas Ausführen des obigen Codes gibt die folgende Ausgabe zurück:
Name = JohnDas erste Element des Listenarguments ist der Name des zu ausgeführten Befehls. Jedes Element in der Liste, das das erste Element folgt, werden als Befehlszeilenoptionen oder Switches betrachtet. Sie können auch einzelne Armaturenbrett- und Doppelstriche verwenden, um die Optionen zu definieren. Um beispielsweise Dateien und Ordner in einem Verzeichnis aufzulisten, wäre der Code „Subprozess.run (["ls", "-l"] ". In den meisten Fällen können Sie jedes platzgetrennte Argument in einem Shell-Befehl als einzelnes Element in der Liste an den Unterprozess in Betracht ziehen.Methode ausführen.
Beispiel 2: Unterdrückung der Ausgabe von Subprozess.Methode ausführen
Unterdrückung der Ausgabe des Subprozesses.Ausführen der Methode müssen Sie „stdout = subprocess liefern.Devnull “und„ Stderr = Subprozess.Devnull ”als zusätzliche Argumente.
Subprozess importierenDas Ausführen des obigen Codes erzeugt die folgende Ausgabe:
Ferastprozess (args = ['kat', 'Daten.txt '], returnCode = 0)Beispiel 3: Erfassungsausgabe von Subprozess.Methode ausführen
Um die Ausgabe des Subprozesses zu erfassen.Verwenden Sie die Methode, verwenden Sie ein zusätzliches Argument mit dem Namen "capture_output = true".
Subprozess importierenDas Ausführen des obigen Codes erzeugt die folgende Ausgabe:
Ferastprozess (args = ['kat', 'Daten.txt '], returnCode = 0,Sie können einzeln auf STDOut- und STDERR -Werte zugreifen, indem Sie „Ausgabe verwenden.stdout “und„ Ausgabe.Stderr ”Methoden. Der Ausgang wird als Byte -Sequenz erzeugt. Verwenden Sie, um eine Zeichenfolge als Ausgabe zu erhalten, um die Ausgabe zu verwenden.Stdout.decodieren ("utf-8") "Methode. Sie können auch "text = true" als zusätzliches Argument für den Subprozess liefern.Rufen Sie den Anruf aus, um die Ausgabe im String -Format zu erhalten. Um den Bezug -Statuscode zu erhalten, können Sie die Ausgabe verwenden.ReturnCode ”-Methode.
Beispiel 4: Erhöhen Sie die Ausnahme zum Versagen des von Subprozess ausgeführten Befehls.Methode ausführen
Verwenden Sie das Argument "check = true", um eine Ausnahme zu erhalten, wenn der Befehl mit einem Status ungleich Null-Status beendet ist.
Subprozess importierenDas Ausführen des obigen Codes erzeugt die folgende Ausgabe:
Raise Calling Processirror (Retcode, Prozess.Args,Beispiel 5: Übergeben Sie eine Zeichenfolge an Befehl, die vom Subprozess ausgeführt wird.Methode ausführen
Sie können eine Zeichenfolge an den Befehl übergeben, der von Subprozess ausgeführt werden soll.Führen Sie die Methode mit "input = 'String" aus.
Subprozess importierenDas Ausführen des obigen Codes erzeugt die folgende Ausgabe:
FerastProcess (args = ['cat'], returnCode = 0, stdout = 'Daten.txt ', stderr = ")Wie Sie sehen können, gibt der obige Code „Daten.txt ”als Zeichenfolge und nicht als Dateiobjekt. Daten übergeben.TXT ”Verwenden Sie als Datei das Argument„ stdin “.
mit offen ("Daten.txt ") als f:Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
Fertigerprozess (args = ['cat'], returnCode = 0, stdout = 'name = John \ n', stderr = ")Beispiel 6: Führen Sie den Befehl direkt in der Shell mit dem Subprozess aus.Methode ausführen
Es ist möglich, einen Befehl direkt in eine Shell „wie es“ auszuführen, anstatt einen String -Split in den Hauptbefehl und die folgenden Optionen zu verwenden. Dazu müssen Sie „Shell = True“ als zusätzliches Argument bestehen. Dies wird jedoch von Python -Entwicklern entmutigt, da die Verwendung von „Shell = true“ zu Sicherheitsproblemen führen kann. Von hier aus können Sie mehr über Sicherheitsauswirkungen lesen.
Subprozess importierenDas Ausführen des obigen Codes erzeugt die folgende Ausgabe:
Name = JohnAbschluss
Der Subprozess.Run -Methode in Python ist ziemlich leistungsfähig, da Sie Shell -Befehle in Python selbst ausführen können. Dies hilft bei der Begrenzung des gesamten Codes auf Python selbst, ohne zusätzlichen Shell -Skriptcode in separaten Dateien zu haben. Es kann jedoch ziemlich schwierig sein, Shell -Befehle in einer Python -Liste korrekt zu tokenisieren. Sie können den „Shlex.split () ”Methode zum Tokenize einfache Shellbefehle, aber in langen, komplexen Befehlen - insbesondere solchen mit Rohrsymbolen - kann Shlex den Befehl nicht korrekt geteilt. In solchen Fällen kann das Debuggen ein schwieriges Thema sein. Mit dieser Aktion können Sie das Argument „Shell = True“ verwenden, um dies zu vermeiden, aber es sind bestimmte Sicherheitsbedenken verbunden.