Beispiele für Python Subprocess.Popen

Beispiele Fur Python Subprocess Popen



Der Python-Unterprozess ist eines der nützlichen Module, das zum Ausführen verschiedener Shell-Befehle und -Prozesse sowie zum Ausführen eines anderen Skripts oder ausführbarer Dateien mithilfe des Python-Skripts verwendet wird. Es kann auch zum Umleiten der Daten von einem Prozess zu einem anderen Prozess und zur Behandlung von Fehlern verwendet werden, die von den untergeordneten Prozessen generiert werden. Das Unterprozessmodul verfügt über viele Klassen, die für verschiedene Zwecke verwendet werden. Die Klasse „subprocess.Popen“ ist eine der Klassen dieses Moduls, die zur Interaktion mit externen Prozessen und zur Ausführung verschiedener Arten von Aufgaben zwischen den Prozessen verwendet wird. In diesem Tutorial werden mehrere Verwendungsmöglichkeiten der Klasse „subprocess.Popen“ im Python-Skript gezeigt.

Inhaltsthema:

  1. Führen Sie einen einfachen Linux-Befehl aus
  2. Führen Sie einen Befehl mit Eingabedaten aus
  3. Führen Sie ein Python-Skript aus
  4. Behandeln Sie den Unterprozessfehler
  5. Gibt den Code von Subprocess.Popen zurück
  6. Leiten Sie die Ausgabe des Unterprozesses in eine Datei um
  7. Multiprocessing mit Subprocess.Popen
  8. Behandeln Sie den Eingabe- und Ausgabestream S
  9. Kontrollieren Sie Timeout und Verzögerung
  10. 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 Modul

importieren 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:



  p1



Zur Spitze gehen





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 Modul

importieren 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:

Zur Spitze gehen

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 importieren

importieren 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:

Zur Spitze gehen

`

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 Module

importieren 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:

  S. 4-1

Die folgende Ausgabe erscheint, wenn der Befehl „usr“ als Eingabe verwendet wird, bei der es sich um einen gültigen Befehl handelt:

  S. 4-2

Zur Spitze gehen

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 Module

importieren 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:

Zur Spitze gehen

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 importieren

importieren 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:

Zur Spitze gehen

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 importieren

importieren 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:

Zur Spitze gehen

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 importieren

importieren 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:

Zur Spitze gehen

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 Unterprozessmodul

importieren 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:

Zur Spitze gehen

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 importieren

importieren 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:

Zur Spitze gehen

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.