Inhaltsthema:
- Führen Sie einen einfachen Linux-Befehl aus
- Führen Sie einen Befehl mit Eingabedaten aus
- Führen Sie ein Python-Skript aus
- Behandeln Sie den Unterprozessfehler
- Gibt den Code von Subprocess.Popen zurück
- Leiten Sie die Ausgabe des Unterprozesses in eine Datei um
- Multiprocessing mit Subprocess.Popen
- Behandeln Sie den Eingabe- und Ausgabestream S
- Kontrollieren Sie Timeout und Verzögerung
- Lesen Sie eine Streaming-Eingabe
Führen Sie einen einfachen Linux-Befehl aus
Mit dem Befehl „date“ werden das aktuelle Systemdatum und die aktuelle Systemzeit angezeigt. Erstellen Sie eine Python-Datei mit dem folgenden Skript, das einen Unterprozess erstellt, der den Befehl „date“ ausführt und die Ausgabe dieses Befehls druckt:
#Importieren Sie das Modulimportieren Unterprozess
#Definieren Sie einen Befehl für den Unterprozess und
#Öffnen Sie den Prozess mithilfe der Funktion Popen()
Ausgabe = Unterprozess . Popen ( [ 'Datum' ] , stdout = Unterprozess . ROHR )
#Rufen Sie die Ausgabe und den Fehler ab, indem Sie mit dem Prozess kommunizieren
stdout , stderr = Ausgabe. kommunizieren ( )
#Drucken Sie die Ausgabe
drucken ( stdout. dekodieren ( ) )
Ausgabe:
Nach der Ausführung des vorherigen Skripts erscheint die folgende Ausgabe:
Führen Sie einen Befehl mit Eingabedaten aus
Der Befehl „wc“ mit der Option „-c“ wird verwendet, um die Gesamtzahl der Zeichen des Zeichenfolgenwerts zu zählen, der mit diesem Befehl bereitgestellt wird. Erstellen Sie eine Python-Datei mit dem folgenden Skript, das einen Unterprozess mit der Funktion Popen() erstellt, um die Befehle „wc –c“ auszuführen. Der Zeichenfolgenwert wird nach der Ausführung des Skripts vom Terminal übernommen und die Gesamtzahl der Zeichen der Eingabezeichenfolge wird in der Ausgabe gedruckt.
#Importieren Sie das Modulimportieren Unterprozess
#Definieren Sie einen Befehl für den Unterprozess und
#Öffnen Sie den Prozess mit der Funktion Popen()
Ausgabe = Unterprozess . Popen ( [ 'Toilette' , '-C' ] , stdout = Unterprozess . ROHR )
#Rufen Sie die Ausgabe und den Fehler ab, indem Sie mit dem Prozess kommunizieren
stdout , stderr = Ausgabe. kommunizieren ( )
#Drucken Sie die Ausgabe
drucken ( stdout. dekodieren ( ) )
Ausgabe:
Für den Eingabewert „Python-Subprozessbeispiele“ erscheint die folgende Ausgabe:
Führen Sie ein Python-Skript aus
Erstellen Sie eine Python-Datei mit dem Namen „sum.py“ mit dem folgenden Skript, das die Summe zweier Zahlen berechnet. Diese Zahlen werden als Befehlszeilenargumente bereitgestellt:
sum.py
#Notwendiges Modul importierenimportieren sys
#Zähle die Gesamtzahl der Argumente
N = nur ( sys . argv )
#Fügen Sie die ersten beiden Argumentwerte hinzu
Summe = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )
#Drucken Sie das Additionsergebnis aus
drucken ( 'Die Summe von ' + sys . argv [ 1 ] + ' Und ' + sys . argv [ 2 ] + ' Ist' , Summe )
Erstellen Sie eine Python Datei mit das folgende Skript, das ein Python ausführt Datei genannt Summe . py mit zwei Argumente durch Erstellen von a Unterprozess .
#Importieren Sie das Modul
importieren Unterprozess
#Führen Sie ein Python-Skript im Unterprozess aus und
#Öffnen Sie den Prozess mit der Funktion Popen()
Ausgabe = Unterprozess . Popen ( [ „Python3“ , „sum.py“ , „25“ , „55“ ] , stdout = Unterprozess . ROHR ) #Rufen Sie die Ausgabe und den Fehler ab, indem Sie mit dem Prozess kommunizieren
stdout , stderr = Ausgabe. kommunizieren ( )
#Drucken Sie die Ausgabe
drucken ( stdout. dekodieren ( ) )
Ausgabe:
Nach der Ausführung des vorherigen Skripts erscheint die folgende Ausgabe:
`
Behandeln Sie den Unterprozessfehler
Erstellen Sie eine Python-Datei mit dem folgenden Skript, das die Fehler des Unterprozesses mithilfe des „try-exclusive“-Blocks behandelt. Ein Befehl wird vom Benutzer entgegengenommen und vom Unterprozess ausgeführt. Die Fehlermeldung wird angezeigt, wenn vom Benutzer ein ungültiger Befehl übernommen wird.
#Importieren Sie die Moduleimportieren Unterprozess
importieren sys
#Kommando vom Benutzer übernehmen
Befehl = Eingang ( „Geben Sie einen gültigen Befehl ein:“ )
versuchen :
#Öffnen Sie den Prozess mit der Funktion Popen()
Ausgabe = Unterprozess . Popen ( [ Befehl ] , stdout = Unterprozess . ROHR )
#Rufen Sie die Ausgabe und den Fehler ab, indem Sie mit dem Prozess kommunizieren
stdout , stderr = Ausgabe. kommunizieren ( )
#Drucken Sie die Ausgabe
drucken ( stdout. dekodieren ( ) )
außer :
drucken ( 'Fehler:' , sys . exc_info ( ) )
Ausgabe:
Die folgende Ausgabe erscheint, wenn der Befehl „pwd“ als Eingabe verwendet wird, bei der es sich um einen gültigen Befehl handelt:
Die folgende Ausgabe erscheint, wenn der Befehl „usr“ als Eingabe verwendet wird, bei der es sich um einen gültigen Befehl handelt:
Gibt den Code von Subprocess.Popen zurück
Erstellen Sie eine Python-Datei mit dem folgenden Skript, das über den Unterprozess einen „ls“-Befehl ausführt, um die Liste aller Python-Dateien vom aktuellen Speicherort abzurufen. Das Skript wartet auf den Abschluss des Unterprozesses und gibt den Rückkehrcode aus.
#Importieren Sie die Moduleimportieren Unterprozess
importieren sys
#Stellen Sie den Befehl ein
Befehl = [ 'ls' , '-l' , '*.py' ]
versuchen :
#Öffnen Sie den Prozess mit der Funktion Popen()
Ausgabe = Unterprozess . Popen ( Befehl , stdout = Unterprozess . ROHR ,
stderr = Unterprozess . ROHR , Text = WAHR )
#Warten Sie, bis der Vorgang abgeschlossen ist
retCode = Ausgabe. Warten ( )
#Drucken Sie den Rückkehrcode aus
drucken ( 'Rückgabe Code:' , retCode )
außer :
#Fehlermeldung für das Falsche drucken
drucken ( 'Fehler:' , sys . exc_info ( ) )
Ausgabe:
Eine ähnliche Ausgabe erscheint nach der Ausführung des vorherigen Skripts:
Leiten Sie die Ausgabe des Unterprozesses in eine Datei um
Erstellen Sie mit dem folgenden Skript eine Python-Datei, die die Ausgabe des Unterprozesses in eine Textdatei schreibt. Der Befehl, der vom Unterprozess ausgeführt wird, wird vom Benutzer übernommen.
#Modul importierenimportieren Unterprozess
#Definieren Sie den Dateinamen
Dateiname = „outfile.txt“
#Nehmen Sie einen Ping-Befehl entgegen
cmd = Eingang ( „Geben Sie einen Ping-Befehl ein:“ )
#Teilen Sie die aufgenommene Eingabe basierend auf dem Platz auf
args = cmd . Teilt ( )
#Schreiben Sie die Befehlsausgabe in die Datei
mit offen ( Dateiname , 'In' ) als Outdata:
Verfahren = Unterprozess . Popen ( args , stdout = outdata )
#Warten Sie, bis der Vorgang abgeschlossen ist
Rückgabe Code = Verfahren. Warten ( )
Ausgabe:
Gemäß der folgenden Ausgabe lautet der Befehl „ping -c 3 www.google.com Der Befehl „cat“ wird vom Benutzer übernommen und der Befehl „cat“ wird verwendet, um den Inhalt der Datei anzuzeigen, die vom Unterprozess geschrieben wird:
Multiprocessing mit Subprocess.Popen
Erstellen Sie eine Python-Datei mit dem folgenden Skript, in dem die Verwendung von Multiprocessing mithilfe eines Unterprozesses gezeigt wird. Hier wird eine Funktion namens display_msg() mithilfe von Multiprocessing mehrmals aufgerufen.
#Notwendige Module importierenimportieren Mehrfachverarbeitung
importieren Unterprozess
#Definieren Sie die Funktion, die durch Mehrfachverarbeitung aufgerufen wird
def display_msg ( N ) :
#Definieren Sie den Befehl mit der Funktion format()
cmd = „echo ‚Python-Programmierung‘“ . Format ( N )
#Öffnen Sie den Prozess mit der Funktion Popen()
Verfahren = Unterprozess . Popen ( cmd , Hülse = WAHR , stdout = Unterprozess . ROHR )
#Rufen Sie die Ausgabe und den Fehler ab, indem Sie mit dem Prozess kommunizieren
stdout , Fehler = Verfahren. kommunizieren ( )
#Drucken Sie die Ausgabe
drucken ( stdout. dekodieren ( ) )
#Rufen Sie die Funktion fünfmal auf, indem Sie den multiprocessing.Pool erstellen
mit Mehrfachverarbeitung. Schwimmbad ( Mehrfachverarbeitung. cpu_count ( ) ) als MP:
#Map die Funktion
Abgeordneter. Karte ( display_msg , Reichweite ( 1 , 5 ) )
Ausgabe:
Nach der Ausführung des vorherigen Skripts erscheint die folgende Ausgabe:
Behandeln Sie die Eingabe- und Ausgabeströme
Erstellen Sie eine Textdatei mit dem Namen „test.txt“ mit dem folgenden Inhalt, bevor Sie das Python-Skript dieses Beispiels erstellen.
test.txt
PERL
Python
bash
php
Erstellen Sie eine Python-Datei mit dem folgenden Skript, das einen Unterprozess zum Lesen des Inhalts der Datei „test.txt“ und einen anderen Unterprozess zum Suchen nach einem bestimmten Wort in dieser Textdatei verwendet. Hier wird nach dem Wort „Python“ in der „test.txt-Datei“ gesucht, die dieses Wort enthält.
#Module importierenimportieren Unterprozess
#Definieren Sie einen Prozess für den Eingabestream
in Bearbeitung = Unterprozess . Popen ( [ 'Katze' , „test.txt“ ] , stdout = Unterprozess . ROHR , Text = Stimmt > #Definieren Sie einen Prozess für den Ausgabestream
out_process = Unterprozess . Popen (
[ 'Griff' , 'Python' ] , stdin = in Bearbeitung. stdout ,
stdout = Unterprozess . ROHR , Text = WAHR )
#Speichern Sie die Ausgabe der Eingabe- und Ausgabeprozesse
Ausgabe , _ = out_process. kommunizieren ( )
#Drucken Sie die Ausgabe
drucken ( 'Ausgabe:' , Ausgabe )
Ausgabe:
Nach der Ausführung des Skripts erscheint folgende Ausgabe:
Steuern Sie den Unterprozess mithilfe eines Timers
Erstellen Sie eine Python-Datei mit dem folgenden Skript, das einen Timer verwendet, um einen Befehl mithilfe eines Unterprozesses auszuführen. Hier wird der „try-exclusive“-Block zum Starten des Timers und der „finally“-Block zum Abbrechen des Timers verwendet.
#Importieren Sie das Unterprozessmodulimportieren Unterprozess
#Importieren Sie das Timer-Modul
aus Einfädeln importieren Timer
#Definieren Sie den Befehl
cmd = [ 'Klingeln' , 'www.example.com' ]
#Öffnen Sie den Vorgang
P = Unterprozess . Popen (
cmd , stdout = Unterprozess . ROHR , stderr = Unterprozess . ROHR )
#Definieren Sie den Timer
Timer = Timer ( 2 , Lambda Prozess: Prozess. töten ( ) , [ P ] )
versuchen :
#Starten Sie den Timer
Timer. Start ( )
#Ausgabe lesen
stdout , _ = P. kommunizieren ( )
#Ausgabe drucken
drucken ( stdout. dekodieren ( ) )
außer :
#Fehlermeldung für das Falsche drucken
drucken ( 'Fehler:' , sys . exc_info ( ) )
Endlich :
#Stoppen Sie den Timer
Timer. stornieren ( )
Ausgabe:
Nach der Ausführung des Skripts erscheint folgende Ausgabe:
Lesen Sie die Streaming-Eingabe
Erstellen Sie eine Python-Datei, die den Inhalt der Unterprozessausgabe mithilfe einer „while“-Schleife liest, und speichern Sie den Inhalt in einer Variablen. Der Inhalt dieser Variablen wird später gedruckt. Hier wird im Unterprozess der Befehl „curl“ verwendet www.google.com URL.
#Modul importierenimportieren Unterprozess
#Befehl definieren
cmd = [ „locken“ , „www.example.com“ ]
P = Unterprozess . Popen ( cmd , stdout = Unterprozess . ROHR ,
stderr = Unterprozess . ROHR , Text = WAHR >
#Initialisieren Sie die Ausgabevariable
Ausgabe = „“
während WAHR :
#Lesen Sie die Prozessausgabe Zeile für Zeile
ln = P. stdout . Zeile lesen ( )
#Beenden Sie die Schleife, wenn der Unterprozess beendet ist
Wenn nicht ln:
brechen
Ausgabe = Ausgabe + ln
#Zeile drucken
drucken ( Ausgabe )
#Rufen Sie den Rückkehrcode ab, nachdem Sie den Vorgang abgeschlossen haben
Rückgabe Code = P. Warten ( )
#Drucken Sie den Rückkehrcode aus
drucken ( 'Rückgabe Code: ' , Rückgabe Code )
Ausgabe:
Der letzte Teil der drei Ausgaben ist im folgenden Bild dargestellt. Der Rückkehrcode nach Abschluss des Unterprozesses ist 0:
Abschluss
In diesem Tutorial werden verschiedene Verwendungszwecke des Python-Unterprozesses.Popen() anhand mehrerer Python-Skripte gezeigt, die den Python-Benutzern helfen, die grundlegenden Verwendungszwecke dieser Funktion kennenzulernen.