Tema vsebine:
- Zaženite preprost ukaz Linux
- Zaženite ukaz z vhodnimi podatki
- Zaženite skript Python
- Obravnavajte napako podprocesa
- Vrnite kodo podprocesa.Popen
- Preusmeri izhod podprocesa v datoteko
- Večprocesiranje z uporabo Subprocess.Popen
- Upravljajte vhodni in izhodni tok s
- Nadzorujte časovno omejitev in zakasnitev
- Preberite pretočni vnos
Zaženite preprost ukaz Linux
Ukaz “datum” se uporablja za prikaz trenutnega sistemskega datuma in ure. Ustvarite datoteko Python z naslednjim skriptom, ki ustvari podproces, ki izvede ukaz »datum« in natisne izhod tega ukaza:
#Uvozite moduluvoz podproces
#Določite ukaz za podproces in
#odpri proces z uporabo funkcije Popen().
izhod = podproces . Popen ( [ 'datum' ] , stdout = podproces . CEV )
#Pridobite izhod in napako s komunikacijo s procesom
stdout , stderr = izhod. komunicirati ( )
#Natisni izhod
tiskanje ( stdout. dekodirati ( ) )
Izhod:
Po izvedbi prejšnjega skripta se prikaže naslednji rezultat:
Zaženite ukaz z vhodnimi podatki
Ukaz »wc« z možnostjo »-c« se uporablja za štetje skupnega števila znakov vrednosti niza, ki je na voljo s tem ukazom. Ustvarite datoteko Python z naslednjim skriptom, ki ustvari podproces s funkcijo Popen() za izvajanje ukazov »wc –c«. Vrednost niza se vzame iz terminala po izvedbi skripta, skupno število znakov vhodnega niza pa se natisne v izhodu.
#Uvozite moduluvoz podproces
#Določite ukaz za podproces in
#Odpri proces s funkcijo Popen().
izhod = podproces . Popen ( [ 'stranišče' , '-c' ] , stdout = podproces . CEV )
#Pridobite izhod in napako s komunikacijo s procesom
stdout , stderr = izhod. komunicirati ( )
#Natisni izhod
tiskanje ( stdout. dekodirati ( ) )
Izhod:
Za vhodno vrednost »Primeri podprocesov Python« se prikaže naslednji izhod:
Zaženite skript Python
Ustvarite datoteko Python z imenom »sum.py« z naslednjim skriptom, ki izračuna vsoto dveh števil in ti številki sta navedeni kot argumenti ukazne vrstice:
sum.py
#Uvoz potrebnega modulauvoz sys
#Preštej skupno število argumentov
n = samo ( sys . argv )
#Dodajte prvi dve vrednosti argumenta
vsota = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )
#Natisni rezultat seštevanja
tiskanje ( 'Vsota' + sys . argv [ 1 ] + ' in ' + sys . argv [ 2 ] + 'je' , vsota )
Ustvarite Python mapa z naslednji skript, ki bo zagnal Python mapa imenovan vsota . py z dva argumenta z ustvarjanjem a podproces .
#Uvozite modul
uvoz podproces
#Zaženi skript python v podprocesu in
#odprite proces s funkcijo Popen().
izhod = podproces . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = podproces . CEV ) #Pridobite izhod in napako s komunikacijo s procesom
stdout , stderr = izhod. komunicirati ( )
#Natisni izhod
tiskanje ( stdout. dekodirati ( ) )
Izhod:
Po izvedbi prejšnjega skripta se prikaže naslednji rezultat:
`
Obravnavajte napako podprocesa
Ustvarite datoteko Python z naslednjim skriptom, ki obravnava napake podprocesa z uporabo bloka »try-except«. Ukaz je vzet od uporabnika in ga izvede podproces. Sporočilo o napaki se prikaže, če od uporabnika prevzame kateri koli neveljaven ukaz.
#Uvozite moduleuvoz podproces
uvoz sys
#Prevzemite ukaz od uporabnika
ukaz = vnos ( 'Vnesite veljaven ukaz: ' )
poskusi :
#Odpri proces s funkcijo Popen().
izhod = podproces . Popen ( [ ukaz ] , stdout = podproces . CEV )
#Pridobite izhod in napako s komunikacijo s procesom
stdout , stderr = izhod. komunicirati ( )
#Natisni izhod
tiskanje ( stdout. dekodirati ( ) )
razen :
tiskanje ( 'Napaka:' , sys . exc_info ( ) )
Izhod:
Naslednji izhod se prikaže, če je ukaz »pwd« vzet kot vhod, ki je veljaven ukaz:
Naslednji izhod se pojavi, če je ukaz »usr« vzet kot vhod, ki je veljaven ukaz:
Vrnite kodo podprocesa.Popen
Ustvarite datoteko Python z naslednjim skriptom, ki prek podprocesa izvede ukaz »ls«, da pridobi seznam vseh datotek Python s trenutne lokacije. Skript čaka na dokončanje podprocesa in natisne povratno kodo.
#Uvozite moduleuvoz podproces
uvoz sys
#Nastavite ukaz
ukaz = [ 'je' , '-l' , '*.py' ]
poskusi :
#Odpri proces s funkcijo Popen().
izhod = podproces . Popen ( ukaz , stdout = podproces . CEV ,
stderr = podproces . CEV , besedilo = Prav )
#Počakajte, da dokončate postopek
retCode = izhod. čakati ( )
#Natisnite povratno kodo
tiskanje ( 'Povratna koda:' , retCode )
razen :
#Natisni sporočilo o napaki za napačno
tiskanje ( 'Napaka:' , sys . exc_info ( ) )
Izhod:
Po izvedbi prejšnjega skripta se pojavi podoben rezultat:
Preusmeri izhod podprocesa v datoteko
Ustvarite datoteko Python z naslednjim skriptom, ki zapiše izhod podprocesa v besedilno datoteko. Ukaz, ki ga izvede podproces, je vzet od uporabnika.
#Uvozni moduluvoz podproces
#Določite ime datoteke
Ime datoteke = 'outfile.txt'
#Vzemite ukaz ping
cmd = vnos ( 'Vnesite ukaz ping:' )
#Razdeli prejeti vnos glede na prostor
args = cmd . razdeliti ( )
#Izhod ukaza zapišite v datoteko
z odprto ( Ime datoteke , 'V' ) kot zastareli podatki:
postopek = podproces . Popen ( args , stdout = outdata )
#Počakajte na dokončanje postopka
povratna_koda = postopek. čakati ( )
Izhod:
V skladu z naslednjim rezultatom je »ping -c 3 www.google.com ” je vzet od uporabnika in ukaz “cat” se uporablja za prikaz vsebine datoteke, ki jo je napisal podproces:
Večprocesiranje z uporabo Subprocess.Popen
Ustvarite datoteko Python z naslednjim skriptom, kjer je prikazana uporaba večprocesiranja z uporabo podprocesa. Tukaj je funkcija z imenom display_msg() večkrat poklicana z uporabo večprocesiranja.
#Uvoz potrebnih modulovuvoz večprocesiranje
uvoz podproces
#Določite funkcijo, ki bo klicana z večprocesiranjem
def display_msg ( n ) :
#Definirajte ukaz s funkcijo format().
cmd = 'echo 'Programiranje Python'' . format ( n )
#Odpri proces s funkcijo Popen().
postopek = podproces . Popen ( cmd , lupina = Prav , stdout = podproces . CEV )
#Pridobite izhod in napako s komunikacijo s procesom
stdout , napaka = postopek. komunicirati ( )
#Natisni izhod
tiskanje ( stdout. dekodirati ( ) )
#Pokličite funkcijo 5-krat tako, da ustvarite multiprocessing.Pool
z večprocesiranje. Bazen ( večprocesiranje. cpu_count ( ) ) kot mp:
#Preslikaj funkcijo
mp. zemljevid ( display_msg , obseg ( 1 , 5 ) )
Izhod:
Po izvedbi prejšnjega skripta se prikaže naslednji rezultat:
Upravljajte vhodne in izhodne tokove
Ustvarite besedilno datoteko z imenom »test.txt« z naslednjo vsebino, preden ustvarite skript Python tega primera.
test.txt
PERL
python
bash
php
Ustvarite datoteko Python z naslednjim skriptom, ki uporablja en podproces za branje vsebine datoteke »test.txt« in drug podproces za iskanje določene besede v tej besedilni datoteki. Tukaj je beseda 'python' preiskana v 'datoteki test.txt', ki vsebuje to besedo.
#Uvozi moduleuvoz podproces
#Definirajte postopek za vhodni tok
v teku = podproces . Popen ( [ 'mačka' , 'test.txt' ] , stdout = podproces . CEV , besedilo = Tru > #Definirajte postopek za izhodni tok
out_process = podproces . Popen (
[ 'prijem' , 'python' ] , stdin = v teku. stdout ,
stdout = podproces . CEV , besedilo = Prav )
#Shrani izhod vhodnih in izhodnih procesov
izhod , _ = out_process. komunicirati ( )
#Natisni izhod
tiskanje ( 'Izhod:' , izhod )
Izhod:
Po izvedbi skripta se prikaže naslednji rezultat:
Nadzirajte podproces s časovnikom
Ustvarite datoteko Python z naslednjim skriptom, ki uporablja časovnik za izvajanje ukaza s pomočjo podprocesa. Tukaj se blok »poskusi razen« uporablja za zagon časovnika, blok »končno« pa za preklic časovnika.
#Uvozite modul podprocesauvoz podproces
#Uvozite modul Timer
od vrezovanje navojev uvoz Časovnik
#Določite ukaz
cmd = [ 'ping' , 'www.example.com' ]
#Odprite postopek
str = podproces . Popen (
cmd , stdout = podproces . CEV , stderr = podproces . CEV )
#Določite časovnik
časovnik = Časovnik ( 2 , lambda proces: proces. ubiti ( ) , [ str ] )
poskusi :
#Zaženite časovnik
časovnik. začetek ( )
#Preberi izpis
stdout , _ = str. komunicirati ( )
#Izpis za tiskanje
tiskanje ( stdout. dekodirati ( ) )
razen :
#Natisni sporočilo o napaki za napačno
tiskanje ( 'Napaka:' , sys . exc_info ( ) )
končno :
#Ustavite časovnik
časovnik. preklicati ( )
Izhod:
Po izvedbi skripta se prikaže naslednji rezultat:
Preberite pretočni vnos
Ustvarite datoteko Python, ki bere vsebino izhoda podprocesa z uporabo zanke »while« in shranite vsebino v spremenljivko. Vsebina te spremenljivke se natisne pozneje. Tukaj je ukaz 'curl' uporabljen v podprocesu za www.google.com URL.
#Uvozni moduluvoz podproces
#Definiraj ukaz
cmd = [ 'koder' , 'www.example.com' ]
str = podproces . Popen ( cmd , stdout = podproces . CEV ,
stderr = podproces . CEV , besedilo = Prav >
#Inicializiraj izhodno spremenljivko
izhod = ''
medtem Prav :
#Preberite izhod postopka vrstico za vrstico
ln = str. stdout . readline ( )
#Zaključi iz zanke, ko se podproces zaključi
če ne v:
odmor
izhod = izhod + ln
#Natisni vrstico
tiskanje ( izhod )
#Po končanem postopku pridobi povratno kodo
povratna_koda = str. čakati ( )
#Natisnite povratno kodo
tiskanje ( 'Povratna koda: ' , povratna_koda )
Izhod:
Zadnji del treh rezultatov je prikazan na naslednji sliki. Povratna koda po zaključku podprocesa je 0:
Zaključek
V tej vadnici so prikazane različne uporabe podprocesa Python.Popen() z uporabo več skriptov Python, ki bodo uporabnikom Pythona pomagali spoznati osnovne uporabe te funkcije.