Python Subprocess.Popen Exemples

Python Subprocess Popen Exemples



Le sous-processus Python est l'un des modules utiles utilisés pour exécuter différentes commandes shell, processus et exécuter un autre script ou des fichiers exécutables à l'aide du script Python. Il peut également être utilisé pour rediriger les données d'un processus vers un autre processus et gérer les erreurs générées par les processus enfants. Le module de sous-processus comporte de nombreuses classes utilisées à diverses fins. La classe « subprocess.Popen » est l'une des classes de ce module utilisée pour interagir avec les processus externes et effectuer différents types de tâches parmi les processus. Plusieurs utilisations de la classe « subprocess.Popen » dans le script Python sont présentées dans ce didacticiel.

Sujet du contenu :

  1. Exécutez une commande Linux simple
  2. Exécuter une commande avec des données d'entrée
  3. Exécuter un script Python
  4. Gérer l'erreur de sous-processus
  5. Renvoie le code du sous-processus.Popen
  6. Rediriger la sortie du sous-processus vers un fichier
  7. Multitraitement à l'aide de Subprocess.Popen
  8. Gérer le flux d'entrée et de sortie s
  9. Contrôler le délai d'attente et le délai
  10. Lire une entrée de streaming

Exécutez une commande Linux simple

La commande « date » est utilisée pour afficher la date et l’heure actuelles du système. Créez un fichier Python avec le script suivant qui crée un sous-processus qui exécute la commande « date » et imprime le résultat de cette commande :

#Importer le module

importer sous-processus

#Définissez une commande pour le sous-processus et

#ouvrir le processus en utilisant la fonction Popen()

sortir = sous-processus . Ouvrir ( [ 'date' ] , sortie standard = sous-processus . TUYAU )

#Récupérez la sortie et l'erreur en communiquant avec le processus

sortie standard , stderr = sortir. communiquer ( )

#Imprimer le résultat

imprimer ( sortie standard. décoder ( ) )

Sortir:







Le résultat suivant apparaît après l'exécution du script précédent :



  p1



Aller en haut





Exécuter une commande avec des données d'entrée

La commande « wc » avec l'option « -c » est utilisée pour compter le nombre total de caractères de la valeur de chaîne fournie avec cette commande. Créez un fichier Python avec le script suivant qui crée un sous-processus avec la fonction Popen() pour exécuter les commandes « wc –c ». La valeur de la chaîne est extraite du terminal après l'exécution du script et le nombre total de caractères de la chaîne d'entrée est imprimé dans la sortie.

#Importer le module

importer sous-processus

#Définissez une commande pour le sous-processus et

#Ouvrir le processus en utilisant la fonction Popen()

sortir = sous-processus . Ouvrir ( [ 'toilettes' , '-c' ] , sortie standard = sous-processus . TUYAU )

#Récupérez la sortie et l'erreur en communiquant avec le processus

sortie standard , stderr = sortir. communiquer ( )

#Imprimer le résultat

imprimer ( sortie standard. décoder ( ) )

Sortir:



Le résultat suivant apparaît pour la valeur d'entrée « Exemples de sous-processus Python » :

Aller en haut

Exécuter un script Python

Créez un fichier Python nommé « sum.py » avec le script suivant qui calcule la somme de deux nombres et ces nombres sont fournis comme arguments de ligne de commande :

somme.py

#Importer le module nécessaire

importer système

#Compter le nombre total d'arguments

n = seulement ( système . argv )

#Ajoutez les deux premières valeurs d'argument

somme = int ( système . argv [ 1 ] ) + int ( système . argv [ 2 ] )

#Imprimer le résultat de l'addition

imprimer ( 'La somme de ' + système . argv [ 1 ] + ' et ' + système . argv [ 2 ] + ' est' , somme )

Créer un Python déposer avec le script suivant qui exécutera un Python déposer nommé somme . py avec deux arguments en créant un sous-processus .

#Importer le module

importer sous-processus

#Exécutez le script python dans le sous-processus et

#ouvrez le processus en utilisant la fonction Popen()

sortir = sous-processus . Ouvrir ( [ 'python3' , 'sum.py' , '25' , '55' ] , sortie standard = sous-processus . TUYAU ) #Récupérez la sortie et l'erreur en communiquant avec le processus

sortie standard , stderr = sortir. communiquer ( )

#Imprimer le résultat

imprimer ( sortie standard. décoder ( ) )

Sortir:

Le résultat suivant apparaît après l'exécution du script précédent :

Aller en haut

`

Gérer l'erreur de sous-processus

Créez un fichier Python avec le script suivant qui gère les erreurs du sous-processus à l'aide du bloc « try-sauf ». Une commande est extraite de l'utilisateur et elle est exécutée par le sous-processus. Le message d'erreur s'affiche si une commande non valide est prise par l'utilisateur.

#Importer les modules

importer sous-processus

importer système

#Prendre la commande de l'utilisateur

commande = saisir ( 'Entrez une commande valide : ' )

essayer :

#Ouvrir le processus en utilisant la fonction Popen()

sortir = sous-processus . Ouvrir ( [ commande ] , sortie standard = sous-processus . TUYAU )

#Récupérez la sortie et l'erreur en communiquant avec le processus

sortie standard , stderr = sortir. communiquer ( )

#Imprimer le résultat

imprimer ( sortie standard. décoder ( ) )

sauf :

imprimer ( 'Erreur:' , système . exc_info ( ) )

Sortir:

La sortie suivante apparaît si la commande « pwd » est prise comme entrée et est une commande valide :

  p4-1

La sortie suivante apparaît si la commande « usr » est prise comme entrée et est une commande valide :

  p4-2

Aller en haut

Renvoie le code du sous-processus.Popen

Créez un fichier Python avec le script suivant qui exécute une commande « ls » via le sous-processus pour obtenir la liste de tous les fichiers Python à partir de l'emplacement actuel. Le script attend la fin du sous-processus et imprime le code retour.

#Importer les modules

importer sous-processus

importer système

#Définissez la commande

commande = [ 'ls' , '-l' , '*.py' ]

essayer :

#Ouvrir le processus en utilisant la fonction Popen()

sortir = sous-processus . Ouvrir ( commande , sortie standard = sous-processus . TUYAU ,

stderr = sous-processus . TUYAU , texte = Vrai )

#Attendez pour terminer le processus

CodeRet = sortir. attendez ( )

#Imprimez le code retour

imprimer ( 'Code de retour:' , CodeRet )

sauf :

#Imprimer un message d'erreur pour le mauvais

imprimer ( 'Erreur:' , système . exc_info ( ) )

Sortir:

Une sortie similaire apparaît après l'exécution du script précédent :

Aller en haut

Rediriger la sortie du sous-processus vers un fichier

Créez un fichier Python avec le script suivant qui écrit la sortie du sous-processus dans un fichier texte. La commande exécutée par le sous-processus provient de l'utilisateur.

#Module d'importation

importer sous-processus

#Définir le nom du fichier

nom de fichier = 'fichierout.txt'

#Prenez une commande ping

cmd = saisir ( 'Entrez une commande ping : ' )

# Diviser l'entrée prise en fonction de l'espace

arguments = cmd . diviser ( )

#Écrivez le résultat de la commande dans le fichier

avec ouvrir ( nom de fichier , 'Dans' ) comme données hors données :

processus = sous-processus . Ouvrir ( arguments , sortie standard = données hors données )

#Attendez la fin du processus

Code de retour = processus. attendez ( )

Sortir:

Selon la sortie suivante, le « ping -c 3 www.google.com ' est extraite de l'utilisateur et la commande ' cat ' est utilisée pour afficher le contenu du fichier qui est écrit par le sous-processus :

Aller en haut

Multitraitement à l'aide de Subprocess.Popen

Créez un fichier Python avec le script suivant où l'utilisation du multitraitement est affichée à l'aide d'un sous-processus. Ici, une fonction nommée display_msg() est appelée plusieurs fois en utilisant le multitraitement.

#Importer les modules nécessaires

importer multitraitement

importer sous-processus

#Définir la fonction qui sera appelée par multitraitement

déf display_msg ( n ) :

#Définissez la commande avec la fonction format()

cmd = 'écho 'Programmation Python'' . format ( n )

#Ouvrir le processus en utilisant la fonction Popen()

processus = sous-processus . Ouvrir ( cmd , coquille = Vrai , sortie standard = sous-processus . TUYAU )

#Récupérez la sortie et l'erreur en communiquant avec le processus

sortie standard , erreur = processus. communiquer ( )

#Imprimer le résultat

imprimer ( sortie standard. décoder ( ) )

#Appelez la fonction 5 fois en créant le multiprocessing.Pool

avec multitraitement. Piscine ( multitraitement. cpu_count ( ) ) comme mp :

#Mapper la fonction

député. carte ( display_msg , gamme ( 1 , 5 ) )

Sortir:

Le résultat suivant apparaît après l'exécution du script précédent :

Aller en haut

Gérer les flux d'entrée et de sortie

Créez un fichier texte nommé « test.txt » avec le contenu suivant avant de créer le script Python de cet exemple.

test.txt

PERLE

python

frapper

php

Créez un fichier Python avec le script suivant qui utilise un sous-processus pour lire le contenu du fichier « test.txt » et un autre sous-processus pour rechercher un mot particulier dans ce fichier texte. Ici, le mot « python » est recherché dans le « fichier test.txt » qui contient ce mot.

#Importer des modules

importer sous-processus

#Définir un processus pour le flux d'entrée

en cours = sous-processus . Ouvrir ( [ 'chat' , 'test.txt' ] , sortie standard = sous-processus . TUYAU , texte = Vrai > #Définir un processus pour le flux de sortie

out_processus = sous-processus . Ouvrir (

[ 'poignée' , 'python' ] , entrée standard = en cours. sortie standard ,

sortie standard = sous-processus . TUYAU , texte = Vrai )

#Stocker la sortie des processus d'entrée et de sortie

sortir , _ = out_process. communiquer ( )

#Imprimer le résultat

imprimer ( 'Sortir:' , sortir )

Sortir:

La sortie suivante apparaît après l'exécution du script :

Aller en haut

Contrôler le sous-processus à l'aide d'une minuterie

Créez un fichier Python avec le script suivant qui utilise un minuteur pour exécuter une commande à l'aide d'un sous-processus. Ici, le bloc « try-sauf » est utilisé pour démarrer le minuteur et le bloc « enfin » est utilisé pour annuler le minuteur.

#Importer le module de sous-processus

importer sous-processus

#Importer le module Minuterie

depuis filetage importer Minuteur

#Définir la commande

cmd = [ 'ping' , 'www.example.com' ]

#Ouvrir le processus

p = sous-processus . Ouvrir (

cmd , sortie standard = sous-processus . TUYAU , stderr = sous-processus . TUYAU )

#Définir la minuterie

minuteur = Minuteur ( 2 , lambda processus : processus. tuer ( ) , [ p ] )

essayer :

#Démarrez le chronomètre

minuteur. commencer ( )

#Lire la sortie

sortie standard , _ = p. communiquer ( )

#Sortie d'impression

imprimer ( sortie standard. décoder ( ) )

sauf :

#Imprimer un message d'erreur pour le mauvais

imprimer ( 'Erreur:' , système . exc_info ( ) )

enfin :

#Arrêtez le chronomètre

minuteur. Annuler ( )

Sortir:

La sortie suivante apparaît après l'exécution du script :

Aller en haut

Lire l'entrée de streaming

Créez un fichier Python qui lit le contenu de la sortie du sous-processus à l'aide d'une boucle « while » et stockez le contenu dans une variable. Le contenu de cette variable est imprimé ultérieurement. Ici, la commande « curl » est utilisée dans le sous-processus pour le www.google.com URL.

#Module d'importation

importer sous-processus

#Définir la commande

cmd = [ 'boucle' , 'www.example.com' ]

p = sous-processus . Ouvrir ( cmd , sortie standard = sous-processus . TUYAU ,

stderr = sous-processus . TUYAU , texte = Vrai >

#Initialiser la variable de sortie

sortir = ''

alors que Vrai :

#Lire le résultat du processus ligne par ligne

dans = p. sortie standard . lire la ligne ( )

#Terminer de la boucle lorsque le sous-processus se termine

si pas Dans :

casser

sortir = sortie + ln

#Imprimez la ligne

imprimer ( sortir )

#Obtenez le code retour après avoir terminé le processus

Code de retour = p. attendez ( )

#Imprimez le code retour

imprimer ( 'Code de retour: ' , Code de retour )

Sortir:

La dernière partie des trois sorties est affichée dans l'image suivante. Le code retour après avoir terminé le sous-processus est 0 :

Aller en haut

Conclusion

Différentes utilisations du sous-processus Python.Popen() sont présentées dans ce didacticiel à l'aide de plusieurs scripts Python qui aideront les utilisateurs de Python à connaître les utilisations de base de cette fonction.