Emne for indhold:
- Kør en simpel Linux-kommando
- Kør en kommando med inputdata
- Kør et Python-script
- Håndter underprocesfejlen
- Returner koden for Subprocess.Popen
- Omdiriger output fra underprocessen til fil
- Multiprocessing ved hjælp af Subprocess.Popen
- Håndter Input og Output Stream s
- Styr timeout og forsinkelse
- Læs et streaming-input
Kør en simpel Linux-kommando
Kommandoen 'dato' bruges til at vise den aktuelle systemdato og -klokkeslæt. Opret en Python-fil med følgende script, der opretter en underproces, der udfører kommandoen 'dato', og udskriv outputtet af denne kommando:
#Importer moduletimportere delproces
#Definer en kommando for underprocessen og
#åben proces ved at bruge Popen() funktion
produktion = delproces . Popen ( [ 'dato' ] , stdout = delproces . RØR )
#Hent output og fejl ved at kommunikere med processen
stdout , stderr = produktion. kommunikere ( )
#Udskriv output
Print ( stdout. afkode ( ) )
Produktion:
Følgende output vises efter udførelse af det forrige script:
Kør en kommando med inputdata
Kommandoen 'wc' med '-c'-indstillingen bruges til at tælle det samlede antal tegn i strengværdien, der leveres med denne kommando. Opret en Python-fil med følgende script, der opretter en underproces med Popen()-funktionen til at køre 'wc -c'-kommandoerne. Strengværdien tages fra terminalen efter eksekvering af scriptet, og det samlede antal tegn i inputstrengen udskrives i outputtet.
#Importer moduletimportere delproces
#Definer en kommando for underprocessen og
#Åbn proces ved at bruge Popen()-funktionen
produktion = delproces . Popen ( [ 'Toilet' , '-c' ] , stdout = delproces . RØR )
#Hent output og fejl ved at kommunikere med processen
stdout , stderr = produktion. kommunikere ( )
#Udskriv output
Print ( stdout. afkode ( ) )
Produktion:
Følgende output vises for inputværdien 'Python Subprocess Eksempler':
Kør et Python-script
Opret en Python-fil med navnet 'sum.py' med følgende script, der beregner summen af to tal, og disse tal er angivet som kommandolinjeargumenter:
sum.py
#Importer nødvendigt modulimportere sys
#Tæl argumenter i alt
n = kun ( sys . argv )
#Tilføj de første to argumentværdier
sum = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )
#Udskriv tilføjelsesresultatet
Print ( 'Summen af ' + sys . argv [ 1 ] + 'og' + sys . argv [ 2 ] + 'er' , sum )
Opret en Python fil med følgende script, der vil køre en Python fil som hedder sum . py med to argumenter ved at skabe en delproces .
#Importer modulet
importere delproces
#Kør python-script i underprocessen og
#åbn processen ved at bruge Popen()-funktionen
produktion = delproces . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = delproces . RØR ) #Hent output og fejl ved at kommunikere med processen
stdout , stderr = produktion. kommunikere ( )
#Udskriv output
Print ( stdout. afkode ( ) )
Produktion:
Følgende output vises efter udførelse af det forrige script:
`
Håndter underprocesfejlen
Opret en Python-fil med følgende script, der håndterer fejlene i underprocessen ved hjælp af 'try-except'-blokken. En kommando tages fra brugeren, og den udføres af underprocessen. Fejlmeddelelsen vises, hvis en ugyldig kommando tages fra brugeren.
#Importer modulerneimportere delproces
importere sys
#Tag kommandoen fra brugeren
kommando = input ( 'Indtast en gyldig kommando:' )
prøve :
#Åbn proces ved at bruge Popen()-funktionen
produktion = delproces . Popen ( [ kommando ] , stdout = delproces . RØR )
#Hent output og fejl ved at kommunikere med processen
stdout , stderr = produktion. kommunikere ( )
#Udskriv output
Print ( stdout. afkode ( ) )
undtagen :
Print ( 'Fejl:' , sys . exc_info ( ) )
Produktion:
Følgende output vises, hvis kommandoen 'pwd' tages som input, der er en gyldig kommando:
Følgende output vises, hvis kommandoen 'usr' tages som input, der er en gyldig kommando:
Returner koden for Subprocess.Popen
Opret en Python-fil med følgende script, der udfører en 'ls'-kommando gennem underprocessen for at få listen over alle Python-filer fra den aktuelle placering. Scriptet venter på at fuldføre underprocessen og udskriver returkoden.
#Importer modulerneimportere delproces
importere sys
#Indstil kommandoen
kommando = [ 'ls' , '-l' , '*.py' ]
prøve :
#Åbn proces ved at bruge Popen()-funktionen
produktion = delproces . Popen ( kommando , stdout = delproces . RØR ,
stderr = delproces . RØR , tekst = Rigtigt )
#Vent med at fuldføre processen
retCode = produktion. vente ( )
#Udskriv returkoden
Print ( 'Returkode:' , retCode )
undtagen :
#Udskriv fejlmeddelelse for den forkerte
Print ( 'Fejl:' , sys . exc_info ( ) )
Produktion:
Et lignende output vises efter udførelse af det forrige script:
Omdiriger output fra underprocessen til fil
Opret en Python-fil med følgende script, der skriver output fra underprocessen i en tekstfil. Kommandoen, der udføres af underprocessen, tages fra brugeren.
#Importer modulimportere delproces
#Definer filnavnet
filnavn = 'outfile.txt'
#Tag en ping-kommando
cmd = input ( 'Indtast en ping-kommando:' )
#Opdel det taget input baseret på rummet
args = cmd . dele ( )
#Skriv kommandooutputtet i filen
med åben ( filnavn , 'I' ) som uddata:
behandle = delproces . Popen ( args , stdout = uddata )
#Vent på at fuldføre processen
returkode = behandle. vente ( )
Produktion:
Ifølge følgende output, 'ping -c 3 www.google.com kommandoen tages fra brugeren, og kommandoen 'cat' bruges til at vise indholdet af filen, der er skrevet af underprocessen:
Multiprocessing ved hjælp af Subprocess.Popen
Opret en Python-fil med følgende script, hvor brugen af multiprocessing vises ved hjælp af subprocess. Her kaldes en funktion ved navn display_msg() flere gange ved hjælp af multiprocessing.
#Importer nødvendige modulerimportere multibearbejdning
importere delproces
#Definer den funktion, der vil blive kaldt ved multiprocessing
def display_msg ( n ) :
#Definer kommandoen med format()-funktionen
cmd = 'ekko 'Python-programmering'' . format ( n )
#Åbn proces ved at bruge Popen()-funktionen
behandle = delproces . Popen ( cmd , skal = Rigtigt , stdout = delproces . RØR )
#Hent output og fejl ved at kommunikere med processen
stdout , fejl = behandle. kommunikere ( )
#Udskriv output
Print ( stdout. afkode ( ) )
#Ring til funktionen 5 gange ved at oprette multiprocessing.Pool
med multibearbejdning. Pool ( multibearbejdning. cpu_count ( ) ) som mp:
#Kortlæg funktionen
smp. kort ( display_msg , rækkevidde ( 1 , 5 ) )
Produktion:
Følgende output vises efter udførelse af det forrige script:
Håndter input- og outputstrømmene
Opret en tekstfil med navnet 'test.txt' med følgende indhold, før du opretter Python-scriptet i dette eksempel.
test.txt
PERL
python
bash
php
Opret en Python-fil med følgende script, der bruger en underproces til at læse indholdet af 'test.txt'-filen og en anden underproces til at søge efter et bestemt ord i den tekstfil. Her søges efter ordet 'python' i 'test.txt-filen', der indeholder dette ord.
#Importer modulerimportere delproces
#Definer en proces for inputstrømmen
i gang = delproces . Popen ( [ 'kat' , 'test.txt' ] , stdout = delproces . RØR , tekst = Tru > #Definer en proces for outputstrømmen
ud_proces = delproces . Popen (
[ 'greb' , 'python' ] , stdin = i gang. stdout ,
stdout = delproces . RØR , tekst = Rigtigt )
#Gem output fra input- og outputprocesserne
produktion , _ = ud_proces. kommunikere ( )
#Udskriv output
Print ( 'Produktion:' , produktion )
Produktion:
Følgende output vises efter eksekvering af scriptet:
Styr underprocessen ved hjælp af en timer
Opret en Python-fil med følgende script, der bruger en timer til at udføre en kommando ved hjælp af en underproces. Her bruges 'try-except'-blokken til at starte timeren og 'endelig'-blokken bruges til at annullere timeren.
#Importer underprocesmoduletimportere delproces
#Importer Timer-modulet
fra trådning importere Timer
#Definer kommandoen
cmd = [ 'ping' , 'www.example.com' ]
#Åbn processen
s = delproces . Popen (
cmd , stdout = delproces . RØR , stderr = delproces . RØR )
#Definer timeren
timer = Timer ( 2 , lambda proces: proces. dræbe ( ) , [ s ] )
prøve :
#Start timeren
timer. Start ( )
#Læs output
stdout , _ = s. kommunikere ( )
#Udskriv output
Print ( stdout. afkode ( ) )
undtagen :
#Udskriv fejlmeddelelse for den forkerte
Print ( 'Fejl:' , sys . exc_info ( ) )
endelig :
#Stop timeren
timer. afbestille ( )
Produktion:
Følgende output vises efter eksekvering af scriptet:
Læs streaminginputtet
Opret en Python-fil, der læser indholdet af subprocesoutputtet ved hjælp af en 'while'-løkke, og gem indholdet i en variabel. Indholdet af denne variabel udskrives senere. Her bruges 'curl'-kommandoen i underprocessen til www.google.com URL.
#Importer modulimportere delproces
#Definer kommando
cmd = [ 'krølle' , 'www.example.com' ]
s = delproces . Popen ( cmd , stdout = delproces . RØR ,
stderr = delproces . RØR , tekst = Rigtigt >
#Initialiser outputvariablen
produktion = ''
mens Rigtigt :
#Læs procesoutput linje for linje
ln = s. stdout . læselinje ( )
#Afslut fra løkken, når underprocessen er færdig
hvis ikke ln:
pause
produktion = output + ln
#Udskriv linjen
Print ( produktion )
#Få returkoden efter at have afsluttet processen
returkode = s. vente ( )
#Udskriv returkoden
Print ( 'Returkode: ' , returkode )
Produktion:
Den sidste del af de tre udgange er vist på det følgende billede. Returkoden efter fuldførelse af underprocessen er 0:
Konklusion
Forskellige anvendelser af Python-underprocessen.Popen() er vist i denne tutorial ved hjælp af flere Python-scripts, som vil hjælpe Python-brugerne med at kende de grundlæggende anvendelser af denne funktion.