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

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

PHPz
PHPzoriginal
2023-07-30 10:07:581138parcourir

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

Présentation :
Dans le développement Python, nous devons parfois appeler d'autres commandes ou programmes externes dans le programme. Le module de sous-processus est une bibliothèque standard fournie par Python, qui peut facilement créer et communiquer avec des sous-processus. Cet article présentera comment utiliser le module de sous-processus pour la gestion des sous-processus et l'illustrera avec des exemples de code.

  1. Créer un sous-processus :
    La fonction la plus couramment utilisée dans le module de sous-processus est subprocess.Popen(), qui peut démarrer un nouveau processus et renvoyer un objet Popen. La syntaxe de base pour utiliser la fonction Popen() pour créer un sous-processus est la suivante : subprocess.Popen(),它能够启动一个新进程并返回一个Popen对象。使用Popen()函数创建子进程的基本语法如下:
import subprocess

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, 
                 close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, 
                 creationflags=0)

参数说明:

  • args: 字符串或者序列类型的命令行参数
  • bufsize: 控制输入输出缓冲大小的参数,0代表不缓冲,1代表行缓冲,其他正数代表缓冲区大小
  • executable: 可执行文件的路径,默认使用系统PATH环境变量中的搜索路径
  • stdin: 子进程的标准输入流,默认为PIPE,即通过Popen对象的stdin属性进行输入
  • stdout: 子进程的标准输出流,默认为PIPE,即通过Popen对象的stdout属性进行输出
  • stderr: 子进程的标准错误流,默认为PIPE,即通过Popen对象的stderr属性进行输出
  • preexec_fn: 一个将在子进程启动之前被调用的可执行对象
  • close_fds: 是否关闭不再需要的文件描述符,默认为False
  • shell: 是否通过shell进行命令解析,默认为False
  • cwd: 工作目录,默认为None
  • env: 环境变量,默认为None,即使用父进程的环境变量
  • universal_newlines: 控制输入输出是否转换为文本模式,默认为False
  • startupinfo: 子进程的启动信息,默认为None
  • creationflags: 子进程的创建标记,默认为0

示例代码1:启动一个子进程并执行命令,然后获取子进程的输出结果。

import subprocess

cmd = "ls -l"
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
output, _ = p.communicate()
print(output)
  1. 子进程的输入输出:
    在创建子进程时,我们可以通过Popen()函数的stdin、stdout、stderr参数来指定子进程的输入输出。如果不指定这些参数,默认会创建一个新的管道并通过Popen对象的属性来读写。

示例代码2:启动一个子进程并通过管道进行输入、输出。

import subprocess

cmd = "grep -E 'a|b|c'"
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
input_data = "abcdefg
hijklmnop
qrstuvwxyz
"
output, _ = p.communicate(input_data)
print(output)

示例代码3:启动一个子进程并重定向输出到文件中。

import subprocess

cmd = "grep -E 'a|b|c' input.txt > output.txt"
subprocess.Popen(cmd, shell=True)
  1. 等待子进程结束:
    子进程的执行是异步的,默认情况下,Popen()函数会立即返回一个Popen对象,而不会等待子进程执行完毕。如果我们需要等待子进程执行完毕后再进行下一步操作,可以使用Popen()对象的wait()方法。

示例代码4:启动一个子进程并等待其执行完毕。

import subprocess

cmd = "ls -l"
p = subprocess.Popen(cmd, shell=True)
p.wait()
print("子进程执行完毕")
  1. 捕获子进程的退出状态码:
    每个子进程都会有一个退出状态码,代表其执行结果。可以使用Popen()对象的returncode
  2. import subprocess
    
    cmd = "ls -l"
    p = subprocess.Popen(cmd, shell=True)
    p.wait()
    if p.returncode == 0:
        print("子进程执行成功")
    else:
        print("子进程执行失败")
Description du paramètre :

    args : paramètres de ligne de commande de type chaîne ou séquence


    bufsize : Contrôlez les paramètres d'entrée et de sortie de la taille du tampon, 0 signifie pas de mise en mémoire tampon, 1 signifie mise en mémoire tampon de ligne, d'autres nombres positifs représentent la taille du tampon

    exécutable : le chemin d'accès au fichier exécutable, le chemin de recherche dans la variable d'environnement système PATH est utilisé par défaut

    🎜stdin : le standard du flux d'entrée du processus enfant, la valeur par défaut est PIPE, qui est entré via l'attribut stdin de l'objet Popen 🎜🎜stdout : le flux de sortie standard du processus enfant, qui est par défaut PIPE, qui est généré via l'attribut stdout de l'objet Popen. 🎜🎜stderr : le flux d'erreurs standard du processus enfant. La valeur par défaut est PIPE, qui est généré via l'attribut stderr de l'objet Popen. 🎜🎜preexec_fn : un objet exécutable qui est généré via l'attribut stdout de l'objet Popen. sera appelé avant le démarrage du processus enfant 🎜🎜close_fds : s'il faut fermer les descripteurs de fichiers qui ne sont plus nécessaires, la valeur par défaut est False🎜🎜 shell : s'il faut effectuer une analyse des commandes via le shell, la valeur par défaut est False🎜🎜cwd : le processus de travail répertoire, la valeur par défaut est Aucune🎜🎜env : la variable d'environnement, la valeur par défaut est Aucune, c'est-à-dire que la variable d'environnement du processus parent est utilisée🎜🎜universal_newlines : contrôle si l'entrée et la sortie sont converties en mode Texte, la valeur par défaut est False 🎜🎜startupinfo : les informations de démarrage du processus enfant, la valeur par défaut est Aucune🎜🎜creationflags : l'indicateur de création du processus enfant, la valeur par défaut est 0🎜
🎜Exemple de code 1 : démarrez un processus enfant et exécutez la commande , Ensuite, récupérez le résultat du processus enfant. 🎜rrreee
    🎜Entrée et sortie du sous-processus : 🎜Lors de la création d'un sous-processus, nous pouvons spécifier le sous-processus via les paramètres stdin, stdout et stderr du Popen() Fonction Entrée et sortie. Si ces paramètres ne sont pas spécifiés, un nouveau tube sera créé par défaut et lu et écrit via les propriétés de l'objet Popen. 🎜🎜🎜Exemple de code 2 : démarrez un processus enfant et effectuez des entrées et des sorties via des tuyaux. 🎜rrreee🎜Exemple de code 3 : démarrez un sous-processus et redirigez la sortie vers un fichier. 🎜rrreee
      🎜Attendez la fin du sous-processus : 🎜L'exécution du sous-processus est asynchrone Par défaut, la fonction Popen() renverra un Popen. objet immédiatement au lieu d'attendre que le processus enfant termine son exécution. Si nous devons attendre la fin de l'exécution du processus enfant avant de passer à l'étape suivante, nous pouvons utiliser la méthode wait() de l'objet Popen(). 🎜🎜🎜Exemple de code 4 : démarrez un processus enfant et attendez la fin de son exécution. 🎜rrreee
        🎜Capturez le code d'état de sortie du processus enfant : 🎜Chaque processus enfant aura un code d'état de sortie, représentant son résultat d'exécution. Vous pouvez utiliser l'attribut returncode de l'objet Popen() pour obtenir le code d'état de sortie du processus enfant. S'il vaut 0, cela signifie que l'exécution a réussi. 🎜🎜🎜Exemple de code 5 : obtenez le code d'état de sortie du processus enfant. 🎜rrreee🎜Résumé : 🎜Grâce au module de sous-processus, nous pouvons facilement créer des sous-processus et gérer des processus dans des programmes Python. Les méthodes opérationnelles spécifiques incluent la création d'un processus enfant, le contrôle des entrées et des sorties du processus enfant, l'attente de la fin du processus enfant et la capture du code d'état de sortie du processus enfant. La maîtrise de ces connaissances permet de mieux utiliser Python pour la gestion des sous-processus et d'améliorer la flexibilité et l'évolutivité du programme. 🎜🎜Ce qui précède est le contenu pertinent sur l'utilisation du module de sous-processus pour la gestion des sous-processus dans Python 2.x. J'espère que cela aide. 🎜

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