Sujet du contenu :
- Exécutez une commande Linux simple
- Exécuter une commande avec des données d'entrée
- Exécuter un script Python
- Gérer l'erreur de sous-processus
- Renvoie le code du sous-processus.Popen
- Rediriger la sortie du sous-processus vers un fichier
- Multitraitement à l'aide de Subprocess.Popen
- Gérer le flux d'entrée et de sortie s
- Contrôler le délai d'attente et le délai
- 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 moduleimporter 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 :
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 moduleimporter 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 » :
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écessaireimporter 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 :
`
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 modulesimporter 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 :
La sortie suivante apparaît si la commande « usr » est prise comme entrée et est une commande valide :
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 modulesimporter 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 :
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'importationimporter 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 :
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écessairesimporter 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 :
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 modulesimporter 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 :
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-processusimporter 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 :
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'importationimporter 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 :
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.