Subiect de conținut:
- Rulați o comandă Linux simplă
- Rulați o comandă cu date de intrare
- Rulați un script Python
- Gestionați eroarea de subproces
- Returnați codul de subproces.Popen
- Redirecționați ieșirea subprocesului către fișier
- Multiprocesare folosind Subprocess.Popen
- Gestionați fluxul de intrare și ieșire s
- Controlați timeout-ul și întârzierea
- Citiți o intrare în flux
Rulați o comandă simplă Linux
Comanda „date” este utilizată pentru a afișa data și ora curentă a sistemului. Creați un fișier Python cu următorul script care creează un subproces care execută comanda „date” și tipăriți rezultatul acestei comenzi:
#Importă modululimport subproces
#Definiți o comandă pentru subproces și
#deschideți procesul folosind funcția Popen().
ieșire = subproces . Popen ( [ 'Data' ] , stdout = subproces . ȚEVA )
#Preluați rezultatul și eroarea comunicând cu procesul
stdout , stderr = ieșire. comunica ( )
#Tipărește rezultatul
imprimare ( stdout. decodifica ( ) )
Ieșire:
Următoarea ieșire apare după executarea scriptului anterior:
Rulați o comandă cu date de intrare
Comanda „wc” cu opțiunea „-c” este utilizată pentru a număra numărul total de caractere din valoarea șirului care este furnizat cu această comandă. Creați un fișier Python cu următorul script care creează un subproces cu funcția Popen() pentru a rula comenzile „wc –c”. Valoarea șirului este preluată de la terminal după executarea scriptului și totalul de caractere ale șirului de intrare sunt imprimate în ieșire.
#Importă modululimport subproces
#Definiți o comandă pentru subproces și
#Deschideți procesul utilizând funcția Popen().
ieșire = subproces . Popen ( [ 'WC' , '-c' ] , stdout = subproces . ȚEVA )
#Preluați rezultatul și eroarea comunicând cu procesul
stdout , stderr = ieșire. comunica ( )
#Tipărește rezultatul
imprimare ( stdout. decodifica ( ) )
Ieșire:
Următoarea ieșire apare pentru valoarea de intrare „Exemple de subprocese Python”:
Rulați un script Python
Creați un fișier Python numit „sum.py” cu următorul script care calculează suma a două numere și aceste numere sunt furnizate ca argumente de linie de comandă:
sum.py
#Importă modulul necesarimport sys
#Numărați totalul argumentelor
n = numai ( sys . argv )
#Adăugați primele două valori ale argumentului
sumă = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )
#Tipărește rezultatul adunării
imprimare ( 'Suma ' + sys . argv [ 1 ] + ' și ' + sys . argv [ 2 ] + ' este' , sumă )
Creați un Python fişier cu următorul script care va rula un Python fişier numit sumă . py cu două argumente prin crearea a subproces .
#Importă modulul
import subproces
#Run script python în subproces și
#deschideți procesul utilizând funcția Popen().
ieșire = subproces . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = subproces . ȚEVA ) #Preluați rezultatul și eroarea comunicând cu procesul
stdout , stderr = ieșire. comunica ( )
#Tipărește rezultatul
imprimare ( stdout. decodifica ( ) )
Ieșire:
Următoarea ieșire apare după executarea scriptului anterior:
`
Gestionați eroarea de subproces
Creați un fișier Python cu următorul script care se ocupă de erorile subprocesului folosind blocul „try-except”. O comandă este preluată de la utilizator și este executată de subproces. Mesajul de eroare este afișat dacă orice comandă nevalidă este preluată de la utilizator.
#Importă moduleleimport subproces
import sys
#Preia comanda de la utilizator
comanda = intrare ( 'Introduceți o comandă validă: ' )
încerca :
#Deschideți procesul utilizând funcția Popen().
ieșire = subproces . Popen ( [ comanda ] , stdout = subproces . ȚEVA )
#Preluați rezultatul și eroarea comunicând cu procesul
stdout , stderr = ieșire. comunica ( )
#Tipărește rezultatul
imprimare ( stdout. decodifica ( ) )
cu exceptia :
imprimare ( 'Eroare:' , sys . exc_info ( ) )
Ieșire:
Următoarea ieșire apare dacă comanda „pwd” este luată ca intrare care este o comandă validă:
Următoarea ieșire apare dacă comanda „usr” este luată ca intrare care este o comandă validă:
Returnați codul de subproces.Popen
Creați un fișier Python cu următorul script care execută o comandă „ls” prin intermediul subprocesului pentru a obține lista tuturor fișierelor Python din locația curentă. Scriptul așteaptă să finalizeze subprocesul și tipărește codul de returnare.
#Importă moduleleimport subproces
import sys
#Setați comanda
comanda = [ 'ls' , '-l' , „*.py” ]
încerca :
#Deschideți procesul utilizând funcția Popen().
ieșire = subproces . Popen ( comanda , stdout = subproces . ȚEVA ,
stderr = subproces . ȚEVA , text = Adevărat )
#Așteptați să finalizați procesul
retCode = ieșire. aștepta ( )
#Tipărește codul de retur
imprimare ( „Cod de returnare:” , retCode )
cu exceptia :
#Print mesaj de eroare pentru greșit
imprimare ( 'Eroare:' , sys . exc_info ( ) )
Ieșire:
O ieșire similară apare după executarea scriptului anterior:
Redirecționați ieșirea subprocesului către fișier
Creați un fișier Python cu următorul script care scrie rezultatul subprocesului într-un fișier text. Comanda care este executată de subproces este preluată de la utilizator.
#Import modulimport subproces
#Definește numele fișierului
nume de fișier = „outfile.txt”
#Preluați o comandă ping
cmd = intrare ( 'Introduceți o comandă ping: ' )
#Divizați intrarea luată în funcție de spațiu
argumente = cmd . Despică ( )
#Scrieți rezultatul comenzii în fișier
cu deschis ( nume de fișier , 'În' ) la fel de outdata:
proces = subproces . Popen ( argumente , stdout = outdate )
#Așteptați finalizarea procesului
cod_return = proces. aștepta ( )
Ieșire:
Conform următoarei rezultate, „ping -c 3 www.google.com comanda ” este preluată de la utilizator și comanda „cat” este folosită pentru a afișa conținutul fișierului care este scris de subprocesul:
Multiprocesare folosind Subprocess.Popen
Creați un fișier Python cu următorul script în care utilizarea multiprocesării este afișată folosind subproces. Aici, o funcție numită display_msg() este apelată de mai multe ori folosind multiprocesare.
#Importa modulele necesareimport multiprocesare
import subproces
#Definiți funcția care va fi apelată prin multiprocesare
def display_msg ( n ) :
#Definiți comanda cu funcția format().
cmd = „echo „Programare Python”” . format ( n )
#Deschideți procesul utilizând funcția Popen().
proces = subproces . Popen ( cmd , coajă = Adevărat , stdout = subproces . ȚEVA )
#Preluați rezultatul și eroarea comunicând cu procesul
stdout , eroare = proces. comunica ( )
#Tipărește rezultatul
imprimare ( stdout. decodifica ( ) )
#Apelați funcția de 5 ori prin crearea multiprocesării. Pool
cu multiprocesare. Bazin ( multiprocesare. cpu_count ( ) ) la fel de mp:
#Cartografiați funcția
mp. Hartă ( display_msg , gamă ( 1 , 5 ) )
Ieșire:
Următoarea ieșire apare după executarea scriptului anterior:
Gestionați fluxurile de intrare și de ieșire
Creați un fișier text numit „test.txt” cu următorul conținut înainte de a crea scriptul Python din acest exemplu.
test.txt
PERL
piton
bash
php
Creați un fișier Python cu următorul script care utilizează un subproces pentru a citi conținutul fișierului „test.txt” și un alt subproces pentru a căuta un anumit cuvânt în acel fișier text. Aici, cuvântul „python” este căutat în „fișierul test.txt” care conține acest cuvânt.
#Import moduleimport subproces
#Definiți un proces pentru fluxul de intrare
in proces = subproces . Popen ( [ 'pisică' , „test.txt” ] , stdout = subproces . ȚEVA , text = Tru > #Definiți un proces pentru fluxul de ieșire
out_process = subproces . Popen (
[ 'prindere' , 'piton' ] , stdin = in proces. stdout ,
stdout = subproces . ȚEVA , text = Adevărat )
# Stocați rezultatul proceselor de intrare și de ieșire
ieșire , _ = out_process. comunica ( )
#Tipărește rezultatul
imprimare ( 'Ieșire:' , ieșire )
Ieșire:
Următoarea ieșire apare după executarea scriptului:
Controlați subprocesul folosind un temporizator
Creați un fișier Python cu următorul script care utilizează un cronometru pentru a executa o comandă folosind un subproces. Aici, blocul „try-except” este folosit pentru a porni cronometrul, iar blocul „finally” este folosit pentru a anula cronometrul.
#Importați modulul subprocesuluiimport subproces
#Importați modulul Timer
din filetat import Temporizator
#Definește comanda
cmd = [ 'ping' , „www.example.com” ]
#Deschide procesul
p = subproces . Popen (
cmd , stdout = subproces . ȚEVA , stderr = subproces . ȚEVA )
#Definește cronometrul
temporizator = Temporizator ( 2 , lambda proces: proces. ucide ( ) , [ p ] )
încerca :
#Porniți cronometrul
temporizator. start ( )
#Read output
stdout , _ = p. comunica ( )
#Print output
imprimare ( stdout. decodifica ( ) )
cu exceptia :
#Print mesaj de eroare pentru greșit
imprimare ( 'Eroare:' , sys . exc_info ( ) )
in cele din urma :
#Opriți cronometrul
temporizator. Anulare ( )
Ieșire:
Următoarea ieșire apare după executarea scriptului:
Citiți intrarea în flux
Creați un fișier Python care citește conținutul rezultatului subprocesului folosind o buclă „while” și stocați conținutul într-o variabilă. Conținutul acestei variabile este tipărit ulterior. Aici, comanda „curl” este utilizată în subprocesul pentru www.google.com URL.
#Import modulimport subproces
#Define comanda
cmd = [ 'răsuci' , „www.example.com” ]
p = subproces . Popen ( cmd , stdout = subproces . ȚEVA ,
stderr = subproces . ȚEVA , text = Adevărat >
#Inițializați variabila de ieșire
ieșire = ''
in timp ce Adevărat :
#Citiți rezultatul procesului linie cu linie
ln = p. stdout . Citeste linia ( )
#Terminați din buclă când se termină subprocesul
dacă nu ln:
pauză
ieșire = ieșire + ln
#Tipărește linia
imprimare ( ieșire )
#Obțineți codul de returnare după finalizarea procesului
cod_return = p. aștepta ( )
#Tipărește codul de retur
imprimare ( „Cod de returnare:” , cod_return )
Ieșire:
Ultima parte a celor trei ieșiri este prezentată în imaginea următoare. Codul de returnare după finalizarea subprocesului este 0:
Concluzie
Diferite utilizări ale subprocesului Python. Popen() sunt prezentate în acest tutorial folosind mai multe scripturi Python care vor ajuta utilizatorii Python să cunoască utilizările de bază ale acestei funcții.