Maison  >  Article  >  développement back-end  >  Comment utiliser le module de sous-processus pour la gestion des sous-processus dans Python 3.x

Comment utiliser le module de sous-processus pour la gestion des sous-processus dans Python 3.x

王林
王林original
2023-08-01 13:04:501307parcourir

Comment utiliser le module de sous-processus pour la gestion des sous-processus dans Python 3.x

Introduction :
Dans la programmation Python, nous devons souvent interagir avec des commandes ou des programmes externes, comme exécuter des commandes système, démarrer d'autres applications ou appeler d'autres scripts. La gestion des sous-processus fait référence aux opérations de création, de contrôle et de communication avec les sous-processus dans les programmes Python. Python fournit le module de sous-processus pour gérer la gestion des sous-processus, qui est un outil puissant et flexible. Cet article explique comment utiliser le module de sous-processus pour créer, contrôler et communiquer avec des sous-processus.

1. Création d'un sous-processus
Créer un sous-processus à l'aide du module subprocess est très simple. Vous pouvez créer un objet sous-processus en appelant directement le constructeur de la classe Popen. Voici un exemple de code simple :

import subprocess

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

Dans cet exemple, nous utilisons la méthode constructeur de la classe Popen pour créer un objet de sous-processus. Le paramètre transmis est une liste, et le premier élément de la liste est la commande à exécuter. exécutée. Les éléments suivants sont les paramètres de la commande. Le code ci-dessus exécutera la commande système ls -l et affichera les résultats sur la sortie standard. 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

En plus des méthodes ci-dessus, nous pouvons également exécuter des commandes Shell en spécifiant le paramètre shell=True lors de la création de l'objet sous-processus. L'exemple de code est le suivant :

rrreee
Dans le code ci-dessus, nous passons la commande Shell "ls -l" en paramètre au constructeur de la classe Popen, et passons le paramètre shell=True pour exécuter les commandes Shell.

🎜2. Contrôle du sous-processus🎜Une fois le sous-processus créé avec succès, nous pouvons utiliser diverses méthodes de l'objet sous-processus pour contrôler le comportement du sous-processus. Voici quelques méthodes couramment utilisées : 🎜
  1. wait() : Attendez la fin du processus enfant et renvoyez un code d'état.
  2. communiquer(input=None) : interagissez avec le processus enfant, vous pouvez envoyer du contenu au processus enfant et vous pouvez également obtenir les résultats de sortie du processus enfant.
  3. poll() : Vérifie si le processus enfant se termine. S'il se termine, il renvoie le code d'état du processus. S'il ne se termine pas, il renvoie Aucun.
🎜Ce qui suit est un exemple de code qui obtient le résultat de sortie et le génère à la fin du processus enfant : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons communicate() méthode avec le processus enfant Interagissez, obtenez la sortie du processus enfant et affectez-la à la variable output. Utilisez ensuite la méthode decode("utf-8") pour convertir la chaîne binaire en une chaîne codée en UTF-8 et imprimer le résultat. 🎜🎜3. Communication du sous-processus🎜L'utilisation de la méthode communicate() peut facilement communiquer avec le sous-processus, elle peut non seulement envoyer des données au sous-processus, mais également recevoir les résultats de sortie. du sous-processus. Voici un exemple de code : 🎜rrreee🎜Dans le code ci-dessus, nous créons d'abord un objet de sous-processus p, exécutons la commande ls -l et envoyons le résultat dans sortie. Ensuite, nous créons à nouveau un objet de sous-processus p, exécutons la commande grep example et envoyons input_data au sous-processus. Enfin, nous imprimons les résultats. 🎜🎜Résumé :🎜En utilisant le module de sous-processus, nous pouvons facilement créer, contrôler et communiquer avec des sous-processus. Dans le processus de programmation réel, nous pouvons utiliser ces fonctions de manière flexible en fonction de besoins spécifiques pour réaliser des opérations de gestion de sous-processus plus complexes. J'espère que cet article vous a été utile pour utiliser le module de sous-processus pour la gestion des sous-processus en Python. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn