Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie das Subprozessmodul für die Subprozessverwaltung in Python 3.x

So verwenden Sie das Subprozessmodul für die Subprozessverwaltung in Python 3.x

王林
王林Original
2023-08-01 13:04:501259Durchsuche

So verwenden Sie das Subprozessmodul für die Subprozessverwaltung in Python 3.x

Einführung:
Bei der Python-Programmierung müssen wir häufig mit externen Befehlen oder Programmen interagieren, z. B. um Systembefehle auszuführen, andere Anwendungen zu starten oder andere Skripte aufzurufen. Unterprozessverwaltung bezieht sich auf die Vorgänge zum Erstellen, Steuern und Kommunizieren mit Unterprozessen in Python-Programmen. Python stellt das Subprozessmodul für die Subprozessverwaltung bereit, ein leistungsstarkes und flexibles Tool. In diesem Artikel wird erläutert, wie Sie mit dem Subprozessmodul Subprozesse erstellen, steuern und mit ihnen kommunizieren.

1. Erstellen eines Unterprozesses
Das Erstellen eines Unterprozesses mit dem Unterprozessmodul ist sehr einfach. Sie können ein Unterprozessobjekt erstellen, indem Sie den Konstruktor der Popen-Klasse direkt aufrufen. Das Folgende ist ein einfacher Beispielcode:

import subprocess

# 执行一个系统命令,输出结果到标准输出
subprocess.Popen(["ls", "-l"])

In diesem Beispiel verwenden wir die Konstruktormethode der Popen-Klasse, um ein Unterprozessobjekt zu erstellen, und das erste Element der Liste ist der zu seinde Befehl Die folgenden Elemente sind die Parameter des Befehls. Der obige Code führt den Systembefehl ls -l aus und gibt die Ergebnisse auf der Standardausgabe aus. ls -l,并将结果输出到标准输出。

除了上述的方式外,我们还可以通过在创建子进程对象时指定参数 shell=True 来执行 Shell 命令。示例代码如下:

import subprocess

# 执行一个 Shell 命令
subprocess.Popen("ls -l", shell=True)

在上述代码中,我们将Shell命令 "ls -l" 作为参数传给 Popen 类的构造方法,并通过参数 shell=True 来执行 Shell 命令。

二、子进程的控制
在子进程创建成功后,我们可以使用子进程对象的各种方法来控制子进程的行为。下面是一些常用的方法:

  1. wait():等待子进程结束并返回状态码。
  2. communicate(input=None):与子进程进行交互,可以向子进程发送内容,也可以获取子进程的输出结果。
  3. poll():检查子进程是否结束,如果结束则返回进程的状态码,未结束则返回 None。

下面是一个示例代码,在子进程结束时获取输出结果并输出:

import subprocess

# 执行一个系统命令,获取输出结果
p = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
output, error = p.communicate()
print(output.decode("utf-8"))

在上述代码中,我们使用 communicate() 方法与子进程进行交互,获取子进程的输出结果并赋值给变量 output。接着使用 decode("utf-8") 方法将二进制字符串转换为 UTF-8 编码的字符串,并打印输出。

三、子进程的通信
使用 communicate() 方法可以很方便地与子进程进行通信,不仅可以发送数据给子进程,还可以接收子进程的输出结果。下面是一个示例代码:

import subprocess

# 执行一个命令并接收子进程的输出
p = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
output, error = p.communicate()
print(output.decode("utf-8"))

# 向子进程发送数据并接收输出结果
p = subprocess.Popen(["grep", "example"], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
input_data = "This is an example"
output, error = p.communicate(input=input_data.encode("utf-8"))
print(output.decode("utf-8"))

在上述代码中,我们首先创建一个子进程对象 p,执行命令 ls -l 并将结果输出到 output 中。接着,我们再次创建一个子进程对象 p,执行命令 grep example 并将 input_data

Zusätzlich zu den oben genannten Methoden können wir auch Shell-Befehle ausführen, indem wir beim Erstellen des Unterprozessobjekts den Parameter shell=True angeben. Der Beispielcode lautet wie folgt:

rrreee
Im obigen Code übergeben wir den Shell-Befehl "ls -l" als Parameter an den Konstruktor der Popen-Klasse und übergeben den Parameter shell=True, um Shell-Befehle auszuführen.

🎜2. Steuerung des Unterprozesses🎜Nachdem der Unterprozess erfolgreich erstellt wurde, können wir verschiedene Methoden des Unterprozessobjekts verwenden, um das Verhalten des Unterprozesses zu steuern. Hier sind einige häufig verwendete Methoden: 🎜
  1. wait(): Warten Sie, bis der untergeordnete Prozess beendet ist, und geben Sie einen Statuscode zurück.
  2. communicate(input=None): Interagieren Sie mit dem untergeordneten Prozess, Sie können Inhalte an den untergeordneten Prozess senden und auch die Ausgabeergebnisse des untergeordneten Prozesses erhalten.
  3. poll(): Prüft, ob der untergeordnete Prozess endet. Wenn er endet, wird der Statuscode des Prozesses zurückgegeben. Wenn er nicht endet, wird „None“ zurückgegeben.
🎜Das Folgende ist ein Beispielcode, der das Ausgabeergebnis abruft und ausgibt, wenn der untergeordnete Prozess endet: 🎜rrreee🎜Im obigen Code verwenden wir communicate() Methode mit dem untergeordneten Prozess Interagieren Sie, erhalten Sie die Ausgabe des untergeordneten Prozesses und weisen Sie sie der Variablen output zu. Verwenden Sie dann die Methode decode("utf-8"), um die Binärzeichenfolge in eine UTF-8-codierte Zeichenfolge umzuwandeln und die Ausgabe zu drucken. 🎜🎜3. Kommunikation des Unterprozesses🎜Mit der Methode communicate() können Sie nicht nur Daten an den Unterprozess senden, sondern auch die Ausgabeergebnisse empfangen des Teilprozesses. Das Folgende ist ein Beispielcode: 🎜rrreee🎜Im obigen Code erstellen wir zunächst ein Unterprozessobjekt p, führen den Befehl ls -l aus und geben das Ergebnis aus Ausgabe. Als nächstes erstellen wir erneut ein Unterprozessobjekt p, führen den Befehl grep example aus und senden input_data an den Unterprozess. Abschließend drucken wir die Ergebnisse aus. 🎜🎜Zusammenfassung:🎜Durch die Verwendung des Subprozessmoduls können wir Subprozesse einfach erstellen, steuern und mit ihnen kommunizieren. Im eigentlichen Programmierprozess können wir diese Funktionen je nach spezifischem Bedarf flexibel nutzen, um komplexere Unterprozessverwaltungsvorgänge zu erreichen. Ich hoffe, dieser Artikel hat Ihnen dabei geholfen, das Subprozessmodul für die Subprozessverwaltung in Python zu verwenden. 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Subprozessmodul für die Subprozessverwaltung in Python 3.x. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn