Le sous-processus.méthode d'exécution
Le sous-processus.La méthode d'exécution prend une liste d'arguments. Lorsque la méthode est appelée, il exécute la commande et attend que le processus se termine, renvoyant un objet «terminé» à la fin. L'objet «ComplétedProcess» renvoie Stdout, Stderr, arguments originaux utilisés lors de l'appel de la méthode et un code de retour. STDOUT fait référence au flux de données produit par la commande, tandis que Stderr fait référence à toutes les erreurs soulevées lors de l'exécution du programme. Tout code de retour non nul (code de sortie) signifierait une erreur avec la commande exécutée dans le sous-processus.méthode d'exécution.
Exemple 1: contenu de sortie d'un fichier texte à l'aide du sous-processus.méthode d'exécution
La commande ci-dessous sortira le contenu d'une «données.Fichier txt ”, en supposant qu'il contient une chaîne« name = John ».
sous-processus d'importationL'exécution du code ci-dessus renverra la sortie suivante:
nom = JohnLe premier élément de l'argument de la liste est le nom de la commande à exécuter. Tout élément de la liste qui suit le premier élément est considéré comme des options de ligne de commande ou des commutateurs. Vous pouvez également utiliser un tableau de bord unique et des tirets doubles pour définir les options. Par exemple, pour répertorier les fichiers et les dossiers dans un répertoire, le code serait «Sous-processus.Run (["ls", "-l"] ". Dans la plupart de ces cas, vous pouvez considérer tout argument séparé de l'espace dans une commande shell en tant qu'élément individuel de la liste fournie au sous-processus.méthode d'exécution.
Exemple 2: supprimer la sortie du sous-processus.méthode d'exécution
Pour supprimer la sortie du sous-processus.Méthode d'exécution, vous devrez fournir «stdout = sub-processus.Devnull »et« stderr = sub-processus.Devnull "comme arguments supplémentaires.
sous-processus d'importationL'exécution du code ci-dessus produira la sortie suivante:
Production terminée (args = [«cat», «données.txt '], returncode = 0)Exemple 3: Capture la sortie de la sous-processus.méthode d'exécution
Pour capturer la sortie du sous-processus.Méthode d'exécution, utilisez un argument supplémentaire nommé «capture_output = true».
sous-processus d'importationL'exécution du code ci-dessus produira la sortie suivante:
Production terminée (args = [«cat», «données.txt '], returncode = 0,Vous pouvez accéder individuellement à STDOUT et aux valeurs stderr en utilisant «la sortie.stdout »et« sortie.Méthodes Stderr ». La sortie est produite comme une séquence d'octets. Pour obtenir une chaîne comme sortie, utilisez la «sortie.stdout.MÉTHODE DECODE ("UTF-8") ". Vous pouvez également fournir «Text = True» comme un argument supplémentaire au sous-processus.Exécutez l'appel pour obtenir la sortie au format de chaîne. Pour obtenir le code d'état de sortie, vous pouvez utiliser la «sortie.Méthode de returncode ».
Exemple 4: soulever une exception sur l'échec de la commande exécutée par le sous-processus.méthode d'exécution
Pour lever une exception lorsque la commande sort avec un statut non nul, utilisez l'argument «Check = true».
sous-processus d'importationL'exécution du code ci-dessus produira la sortie suivante:
River appeléProcessError (retcode, processus.args,Exemple 5: Passez une chaîne à la commande exécutée par le sous-processus.méthode d'exécution
Vous pouvez transmettre une chaîne à la commande à exécuter par sub-processus.Exécutez la méthode à l'aide de l'argument «Input = 'String» ».
sous-processus d'importationL'exécution du code ci-dessus produira la sortie suivante:
Terminé Process (args = ['cat'], returncode = 0, stdout = 'data.txt ', stderr = ")Comme vous pouvez le voir, le code ci-dessus passe «Données.txt ”comme chaîne et non comme un objet de fichier. Pour passer les «données.txt "comme fichier, utilisez l'argument" stdin ".
avec ouvert ("Données.txt ") comme f:L'exécution du code ci-dessus produira la sortie suivante:
TerminéProcess (args = ['cat'], returncode = 0, stdout = 'name = John \ n', stderr = ")Exemple 6: Exécutez la commande directement dans Shell à l'aide du sous-processus.méthode d'exécution
Il est possible d'exécuter une commande directement dans un shell «tel quel», au lieu d'utiliser une chaîne divisée dans la commande principale et les options qui le suivent. Pour ce faire, vous devez passer «shell = true» comme argument supplémentaire. Ceci est cependant découragé par les développeurs de Python car l'utilisation de «Shell = True» peut entraîner des problèmes de sécurité. Vous pouvez en savoir plus sur les implications de sécurité à partir d'ici.
sous-processus d'importationL'exécution du code ci-dessus produira la sortie suivante:
nom = JohnConclusion
Le sous-processus.La méthode d'exécution dans Python est assez puissante, car elle vous permet d'exécuter des commandes de shell dans Python lui-même. Cela aide à limiter tout le code à Python lui-même sans avoir besoin d'avoir du code de script shell supplémentaire dans des fichiers séparés. Il peut cependant être tout à fait difficile de tokensiner correctement les commandes de shell dans une liste de python. Vous pouvez utiliser le «Shlex.Méthode Split () ”pour tokensiner des commandes de shell simples, mais dans des commandes longues et complexes - en particulier celles avec des symboles de tuyaux - Shlex ne parvient pas à diviser correctement la commande. Dans de tels cas, le débogage peut être une question délicate. Vous pouvez utiliser l'argument «shell = true» pour éviter cela, mais il y a certaines problèmes de sécurité associés à cette action.