Turinio tema:
- Paleiskite paprastą Linux komandą
- Vykdykite komandą su įvesties duomenimis
- Paleiskite Python scenarijų
- Tvarkyti subproceso klaidą
- Grąžinkite subproceso kodą.Popen
- Peradresuokite subproceso išvestį į failą
- Daugiafunkcis apdorojimas naudojant subprocesus.Popen
- Tvarkykite įvesties ir išvesties srautą s
- Valdykite skirtąjį laiką ir delsą
- Skaityti srautinio perdavimo įvestį
Paleiskite paprastą Linux komandą
Komanda „data“ naudojama dabartinei sistemos datai ir laikui parodyti. Sukurkite Python failą su šiuo scenarijumi, kuris sukuria subprocesą, kuris vykdo komandą „data“, ir išspausdinkite šios komandos išvestį:
#Importuokite modulįimportuoti subprocesas
#Apibrėžkite subproceso komandą ir
#atidaryti procesą naudojant Popen() funkciją
išvestis = subprocesas . Popenas ( [ 'data' ] , stdout = subprocesas . VAMZDZIS )
#Gaukite išvestį ir klaidą bendraudami su procesu
stdout , stderr = išvestis. bendrauti ( )
#Atspausdinkite išvestį
spausdinti ( stdout. dekoduoti ( ) )
Išvestis:
Įvykdžius ankstesnį scenarijų pasirodo ši išvestis:
Vykdykite komandą su įvesties duomenimis
Komanda „wc“ su parinktimi „-c“ naudojama bendram su šia komanda pateiktos eilutės reikšmės simbolių skaičiui skaičiuoti. Sukurkite Python failą su šiuo scenarijumi, kuris sukuria subprocesą su Popen () funkcija, kad paleistumėte „wc –c“ komandas. Eilutės reikšmė paimama iš terminalo, įvykdžius scenarijų, o išvestyje atspausdinami visi įvesties eilutės simboliai.
#Importuokite modulįimportuoti subprocesas
#Apibrėžkite subproceso komandą ir
#Atidaryti procesą naudodami Popen() funkciją
išvestis = subprocesas . Popenas ( [ 'wc' , '-c' ] , stdout = subprocesas . VAMZDZIS )
#Gaukite išvestį ir klaidą bendraudami su procesu
stdout , stderr = išvestis. bendrauti ( )
#Atspausdinkite išvestį
spausdinti ( stdout. dekoduoti ( ) )
Išvestis:
„Python Subprocess Examples“ įvesties reikšmei rodoma ši išvestis:
Paleiskite Python scenarijų
Sukurkite Python failą pavadinimu „sum.py“ naudodami šį scenarijų, kuris apskaičiuoja dviejų skaičių sumą ir šie skaičiai pateikiami kaip komandinės eilutės argumentai:
sum.py
#Importuokite reikiamą modulįimportuoti sys
#Suskaičiuokite visus argumentus
n = tik ( sys . argv )
#Pridėkite pirmąsias dvi argumentų reikšmes
suma = tarpt ( sys . argv [ 1 ] ) + tarpt ( sys . argv [ 2 ] )
#Atspausdinkite pridėjimo rezultatą
spausdinti ( 'Suma ' + sys . argv [ 1 ] + 'ir' + sys . argv [ 2 ] + 'yra' , suma )
Sukurkite Python failą su šį scenarijų, kuris paleis Python failą pavadintas suma . py su du argumentai sukuriant a subprocesas .
#Importuokite modulį
importuoti subprocesas
#Paleiskite python scenarijų poprocese ir
#atidarykite procesą naudodami Popen() funkciją
išvestis = subprocesas . Popenas ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = subprocesas . VAMZDZIS ) #Gaukite išvestį ir klaidą bendraudami su procesu
stdout , stderr = išvestis. bendrauti ( )
#Atspausdinkite išvestį
spausdinti ( stdout. dekoduoti ( ) )
Išvestis:
Įvykdžius ankstesnį scenarijų pasirodo ši išvestis:
`
Tvarkykite subproceso klaidą
Sukurkite Python failą su šiuo scenarijumi, kuris tvarko subproceso klaidas naudojant bloką „bandyti išskyrus“. Iš vartotojo paimama komanda ir ją vykdo subprocesas. Klaidos pranešimas rodomas, jei iš vartotojo paimama neteisinga komanda.
#Importuokite moduliusimportuoti subprocesas
importuoti sys
#Paimkite komandą iš vartotojo
komandą = įvestis ( 'Įveskite galiojančią komandą:' )
bandyti :
#Atidaryti procesą naudodami Popen() funkciją
išvestis = subprocesas . Popenas ( [ komandą ] , stdout = subprocesas . VAMZDZIS )
#Gaukite išvestį ir klaidą bendraudami su procesu
stdout , stderr = išvestis. bendrauti ( )
#Atspausdinkite išvestį
spausdinti ( stdout. dekoduoti ( ) )
išskyrus :
spausdinti ( 'Klaida:' , sys . exc_info ( ) )
Išvestis:
Ši išvestis rodoma, jei komanda „pwd“ yra įvestis, kuri yra tinkama komanda:
Jei komanda „usr“ naudojama kaip įvestis, kuri yra tinkama komanda, pasirodo ši išvestis:
Grąžinkite subproceso kodą.Popen
Sukurkite Python failą su šiuo scenarijumi, kuris vykdo komandą „ls“ per subprocesą, kad gautumėte visų Python failų sąrašą iš dabartinės vietos. Scenarijus laukia, kol užbaigs subprocesą, ir išspausdina grąžinimo kodą.
#Importuokite moduliusimportuoti subprocesas
importuoti sys
#Nustatykite komandą
komandą = [ 'ls' , '-a' , '*.py' ]
bandyti :
#Atidaryti procesą naudodami Popen() funkciją
išvestis = subprocesas . Popenas ( komandą , stdout = subprocesas . VAMZDZIS ,
stderr = subprocesas . VAMZDZIS , tekstą = Tiesa )
#Palaukite, kol baigsite procesą
retCode = išvestis. laukti ( )
#Atspausdinkite grąžinimo kodą
spausdinti ( 'Grąžinimo kodas:' , retCode )
išskyrus :
#Spausdinkite klaidos pranešimą dėl neteisingo
spausdinti ( 'Klaida:' , sys . exc_info ( ) )
Išvestis:
Panaši išvestis pasirodo po ankstesnio scenarijaus vykdymo:
Peradresuokite subproceso išvestį į failą
Sukurkite Python failą naudodami šį scenarijų, kuris įrašo subproceso išvestį į tekstinį failą. Komanda, kurią vykdo subprocesas, paimama iš vartotojo.
#Importuoti modulįimportuoti subprocesas
#Apibrėžkite failo pavadinimą
failo pavadinimas = 'outfile.txt'
#Paimkite ping komandą
cmd = įvestis ( 'Įveskite ping komandą:' )
#Padalinkite gautą įvestį pagal erdvę
args = cmd . padalintas ( )
#Įrašykite komandos išvestį į failą
su atviras ( failo pavadinimas , 'į' ) kaip pasenę duomenys:
procesas = subprocesas . Popenas ( args , stdout = pasenę duomenys )
#Palaukite, kol procesas bus baigtas
grąžinimo_kodas = procesas. laukti ( )
Išvestis:
Pagal šią išvestį „ping -c 3 www.google.com “ komanda paimama iš vartotojo, o komanda „cat“ naudojama failo, kurį parašė subprocesas, turiniui rodyti:
Daugiafunkcis apdorojimas naudojant subprocesus.Popen
Sukurkite Python failą su šiuo scenarijumi, kuriame rodomas kelių apdorojimo naudojimas naudojant subprocesą. Čia funkcija, pavadinta display_msg(), iškviečiama kelis kartus naudojant daugiafunkcinį apdorojimą.
#Importuokite reikiamus moduliusimportuoti daugiafunkcinis apdorojimas
importuoti subprocesas
#Apibrėžkite funkciją, kuri bus iškviesta kelių apdorojimo būdu
def display_msg ( n ) :
#Apibrėžkite komandą naudodami format() funkciją
cmd = 'echo 'Python programavimas' . formatu ( n )
#Atidaryti procesą naudodami Popen() funkciją
procesas = subprocesas . Popenas ( cmd , apvalkalas = Tiesa , stdout = subprocesas . VAMZDZIS )
#Gaukite išvestį ir klaidą bendraudami su procesu
stdout , klaida = procesas. bendrauti ( )
#Atspausdinkite išvestį
spausdinti ( stdout. dekoduoti ( ) )
#5 kartus iškvieskite funkciją, sukurdami daugiafunkcinį apdorojimą.Pool
su daugiafunkcinis apdorojimas. Baseinas ( daugiafunkcinis apdorojimas. cpu_count ( ) ) kaip mp:
#Nustatykite funkciją
mp. žemėlapis ( display_msg , diapazonas ( 1 , 5 ) )
Išvestis:
Įvykdžius ankstesnį scenarijų pasirodo ši išvestis:
Tvarkykite įvesties ir išvesties srautus
Prieš kurdami šio pavyzdžio Python scenarijų sukurkite tekstinį failą pavadinimu „test.txt“ su tokiu turiniu.
testas.txt
PERL
pitonas
bash
php
Sukurkite Python failą naudodami toliau pateiktą scenarijų, kuris naudoja vieną subprocesą „test.txt“ failo turiniui nuskaityti, o kitą – konkretaus žodžio tame tekstiniame faile paieškai. Čia žodžio „python“ ieškoma „test.txt faile“, kuriame yra šis žodis.
#Importuoti moduliusimportuoti subprocesas
#Apibrėžkite įvesties srauto procesą
procese = subprocesas . Popenas ( [ 'katė' , 'testas.txt' ] , stdout = subprocesas . VAMZDZIS , tekstą = Tiesa > #Apibrėžkite išvesties srauto procesą
out_process = subprocesas . Popenas (
[ 'sugriebimas' , 'python' ] , stdin = procese. stdout ,
stdout = subprocesas . VAMZDZIS , tekstą = Tiesa )
#Išsaugokite įvesties ir išvesties procesų išvestį
išvestis , _ = out_process. bendrauti ( )
#Atspausdinkite išvestį
spausdinti ( 'Išvestis:' , išvestis )
Išvestis:
Įvykdžius scenarijų pasirodo ši išvestis:
Valdykite subprocesą naudodami laikmatį
Sukurkite Python failą su šiuo scenarijumi, kuris naudoja laikmatį komandai vykdyti naudojant subprocesą. Čia blokas „bandyti, išskyrus“ naudojamas laikmačiui paleisti, o blokas „pagaliau“ naudojamas laikmačiui atšaukti.
#Importuokite subproceso modulįimportuoti subprocesas
#Importuokite laikmačio modulį
iš sriegimas importuoti Laikmatis
#Apibrėžkite komandą
cmd = [ 'ping' , „www.example.com“ ]
#Atidarykite procesą
p = subprocesas . Popenas (
cmd , stdout = subprocesas . VAMZDZIS , stderr = subprocesas . VAMZDZIS )
#Apibrėžkite laikmatį
laikmatis = Laikmatis ( 2 , lambda procesas: procesas. nužudyti ( ) , [ p ] )
bandyti :
#Paleiskite laikmatį
laikmatis. pradėti ( )
#Skaityti išvestį
stdout , _ = p. bendrauti ( )
#Spausdinimo išvestis
spausdinti ( stdout. dekoduoti ( ) )
išskyrus :
#Spausdinkite klaidos pranešimą dėl neteisingo
spausdinti ( 'Klaida:' , sys . exc_info ( ) )
pagaliau :
# Sustabdykite laikmatį
laikmatis. atšaukti ( )
Išvestis:
Įvykdžius scenarijų pasirodo ši išvestis:
Skaitykite srautinio perdavimo įvestį
Sukurkite Python failą, kuris nuskaito subproceso išvesties turinį naudojant „while“ kilpą, ir išsaugokite turinį kintamajame. Šio kintamojo turinys išspausdinamas vėliau. Čia komanda „curl“ naudojama subprocese www.google.com URL.
#Importuoti modulįimportuoti subprocesas
#Apibrėžkite komandą
cmd = [ 'garbana' , „www.example.com“ ]
p = subprocesas . Popenas ( cmd , stdout = subprocesas . VAMZDZIS ,
stderr = subprocesas . VAMZDZIS , tekstą = Tiesa >
#Inicijuokite išvesties kintamąjį
išvestis = ''
kol Tiesa :
# Perskaitykite proceso išvestį eilutę po eilutės
ln = p. stdout . skaitymo linija ( )
#Nutraukti iš ciklo, kai baigsis subprocesas
jeigu ne ln:
pertrauka
išvestis = išėjimas + ln
#Atspausdinkite eilutę
spausdinti ( išvestis )
# Baigę procesą gaukite grąžinimo kodą
grąžinimo_kodas = p. laukti ( )
#Atspausdinkite grąžinimo kodą
spausdinti ( 'Grąžinimo kodas:' , grąžinimo_kodas )
Išvestis:
Paskutinė trijų išėjimų dalis parodyta kitame paveikslėlyje. Grąžinimo kodas užbaigus subprocesą yra 0:
Išvada
Įvairūs Python subprocess.Popen() naudojimo būdai rodomi šioje pamokoje, naudojant kelis Python scenarijus, kurie padės Python vartotojams sužinoti pagrindinius šios funkcijos naudojimo būdus.