Tema sadržaja:
- Pokrenite jednostavnu Linux naredbu
- Pokrenite naredbu s ulaznim podacima
- Pokrenite Python skriptu
- Riješite pogrešku podprocesa
- Vrati kod podprocesa.Popen
- Preusmjerite izlaz podprocesa u datoteku
- Višeprocesiranje korištenjem Subprocess.Popen
- Rukovanje ulaznim i izlaznim tokom s
- Kontrolirajte vremensko ograničenje i odgodu
- Pročitajte strujni unos
Pokrenite jednostavnu Linux naredbu
Naredba “datum” koristi se za prikaz trenutnog datuma i vremena sustava. Napravite Python datoteku sa sljedećom skriptom koja stvara podproces koji izvršava naredbu 'datum' i ispišite izlaz ove naredbe:
#Uvezite moduluvoz podproces
#Definirajte naredbu za podproces i
#otvorite proces pomoću funkcije Popen().
izlaz = podproces . Popen ( [ 'datum' ] , stdout = podproces . CIJEV )
#Dohvati izlaz i pogrešku komuniciranjem s procesom
stdout , stderr = izlaz. komunicirati ( )
#Ispiši izlaz
ispisati ( stdout. dekodirati ( ) )
Izlaz:
Nakon izvršavanja prethodne skripte pojavljuje se sljedeći izlaz:
Pokrenite naredbu s ulaznim podacima
Naredba “wc” s opcijom “-c” koristi se za brojanje ukupnog broja znakova vrijednosti niza koja se daje ovom naredbom. Stvorite Python datoteku sa sljedećom skriptom koja stvara podproces s funkcijom Popen() za pokretanje naredbi 'wc –c'. Vrijednost niza preuzima se iz terminala nakon izvršavanja skripte, a ukupan broj znakova ulaznog niza ispisuje se u izlazu.
#Uvezite moduluvoz podproces
#Definirajte naredbu za podproces i
#Otvorite proces pomoću funkcije Popen().
izlaz = podproces . Popen ( [ 'zahod' , '-c' ] , stdout = podproces . CIJEV )
#Dohvati izlaz i pogrešku komuniciranjem s procesom
stdout , stderr = izlaz. komunicirati ( )
#Ispiši izlaz
ispisati ( stdout. dekodirati ( ) )
Izlaz:
Za ulaznu vrijednost 'Python Subprocess Examples' pojavljuje se sljedeći izlaz:
Pokrenite Python skriptu
Napravite Python datoteku pod nazivom 'sum.py' sa sljedećom skriptom koja izračunava zbroj dvaju brojeva, a ti se brojevi daju kao argumenti naredbenog retka:
zbroj.py
#Uvezi potreban moduluvoz sustav
#Broj ukupnih argumenata
n = samo ( sustav . argv )
#Dodajte prve dvije vrijednosti argumenta
iznos = int ( sustav . argv [ 1 ] ) + int ( sustav . argv [ 2 ] )
#Ispiši rezultat zbrajanja
ispisati ( 'Zbroj ' + sustav . argv [ 1 ] + ' i ' + sustav . argv [ 2 ] + 'je' , iznos )
Stvorite Python datoteka s sljedeću skriptu koja će pokrenuti Python datoteka imenovani iznos . py s dva argumenta stvaranjem a podproces .
#Uvezite modul
uvoz podproces
#Pokreni python skriptu u potprocesu i
#otvorite proces pomoću funkcije Popen().
izlaz = podproces . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = podproces . CIJEV ) #Dohvati izlaz i pogrešku komuniciranjem s procesom
stdout , stderr = izlaz. komunicirati ( )
#Ispiši izlaz
ispisati ( stdout. dekodirati ( ) )
Izlaz:
Nakon izvršavanja prethodne skripte pojavljuje se sljedeći izlaz:
`
Riješite pogrešku podprocesa
Stvorite Python datoteku sa sljedećom skriptom koja obrađuje pogreške potprocesa pomoću bloka 'pokušaj-osim'. Naredba se preuzima od korisnika i izvršava je podproces. Poruka o pogrešci se prikazuje ako se od korisnika preuzme bilo koja nevažeća naredba.
#Uvezite moduleuvoz podproces
uvoz sustav
#Preuzmi naredbu od korisnika
naredba = ulazni ( 'Unesite valjanu naredbu: ' )
probati :
#Otvorite proces pomoću funkcije Popen().
izlaz = podproces . Popen ( [ naredba ] , stdout = podproces . CIJEV )
#Dohvati izlaz i pogrešku komuniciranjem s procesom
stdout , stderr = izlaz. komunicirati ( )
#Ispiši izlaz
ispisati ( stdout. dekodirati ( ) )
osim :
ispisati ( 'Pogreška:' , sustav . exc_info ( ) )
Izlaz:
Sljedeći izlaz pojavljuje se ako se naredba “pwd” uzme kao ulaz koji je važeća naredba:
Sljedeći izlaz pojavljuje se ako se naredba “usr” uzme kao ulaz koji je važeća naredba:
Vrati kod podprocesa.Popen
Stvorite Python datoteku sa sljedećom skriptom koja izvršava naredbu “ls” kroz podproces da biste dobili popis svih Python datoteka s trenutne lokacije. Skripta čeka da završi potproces i ispisuje povratni kod.
#Uvezite moduleuvoz podproces
uvoz sustav
#Postavite naredbu
naredba = [ 'je' , '-l' , '*.py' ]
probati :
#Otvorite proces pomoću funkcije Popen().
izlaz = podproces . Popen ( naredba , stdout = podproces . CIJEV ,
stderr = podproces . CIJEV , tekst = Pravi )
#Pričekajte da završite proces
retCode = izlaz. čekati ( )
#Ispiši povratni kod
ispisati ( 'Povratni kod:' , retCode )
osim :
#Ispiši poruku o pogrešci za pogrešno
ispisati ( 'Pogreška:' , sustav . exc_info ( ) )
Izlaz:
Sličan izlaz pojavljuje se nakon izvođenja prethodne skripte:
Preusmjerite izlaz podprocesa u datoteku
Stvorite Python datoteku sa sljedećom skriptom koja zapisuje izlaz potprocesa u tekstualnu datoteku. Naredba koju izvršava potproces preuzima se od korisnika.
#Import moduluvoz podproces
#Definirajte naziv datoteke
naziv datoteke = 'outfile.txt'
#Uzmite naredbu ping
cmd = ulazni ( 'Unesite ping naredbu: ' )
#Podijeli preuzeti unos na temelju prostora
args = cmd . podjela ( )
#Zapišite izlaz naredbe u datoteku
s otvoren ( naziv datoteke , 'U' ) kao zastarjeli podaci:
postupak = podproces . Popen ( args , stdout = zastarjeli podaci )
#Pričekajte da se proces završi
povratni_kod = postupak. čekati ( )
Izlaz:
Prema sljedećem rezultatu, 'ping -c 3 www.google.com ” naredba se preuzima od korisnika, a naredba “cat” se koristi za prikaz sadržaja datoteke koju je napisao podproces:
Višeprocesiranje korištenjem Subprocess.Popen
Stvorite Python datoteku sa sljedećom skriptom u kojoj je upotreba višestruke obrade prikazana pomoću podprocesa. Ovdje se funkcija pod nazivom display_msg() poziva više puta korištenjem višestruke obrade.
#Uvezite potrebne moduleuvoz višeprocesiranje
uvoz podproces
#Definirajte funkciju koja će biti pozvana višestrukim procesiranjem
def prikaz_poruke ( n ) :
#Definirajte naredbu funkcijom format().
cmd = 'echo 'Python programiranje'' . format ( n )
#Otvorite proces pomoću funkcije Popen().
postupak = podproces . Popen ( cmd , ljuska = Pravi , stdout = podproces . CIJEV )
#Dohvati izlaz i pogrešku komuniciranjem s procesom
stdout , greška = postupak. komunicirati ( )
#Ispiši izlaz
ispisati ( stdout. dekodirati ( ) )
#Pozovite funkciju 5 puta stvaranjem multiprocessing.Pool
s višeprocesiranje. Bazen ( višeprocesiranje. cpu_count ( ) ) kao mp:
#Mapirajte funkciju
mp. karta ( prikaz_poruke , domet ( 1 , 5 ) )
Izlaz:
Nakon izvršavanja prethodne skripte pojavljuje se sljedeći izlaz:
Rukovanje ulaznim i izlaznim tokovima
Stvorite tekstualnu datoteku pod nazivom 'test.txt' sa sljedećim sadržajem prije stvaranja Python skripte ovog primjera.
test.txt
PERL
piton
udarac
php
Stvorite Python datoteku sa sljedećom skriptom koja koristi jedan podproces za čitanje sadržaja datoteke 'test.txt' i drugi podproces za traženje određene riječi u toj tekstualnoj datoteci. Ovdje se riječ 'python' pretražuje u 'test.txt datoteci' koja sadrži tu riječ.
#Uvoz modulauvoz podproces
#Definirajte proces za ulazni tok
u procesu = podproces . Popen ( [ 'mačka' , 'test.txt' ] , stdout = podproces . CIJEV , tekst = Tru > #Definirajte proces za izlazni tok
izlazni_proces = podproces . Popen (
[ 'zahvat' , 'piton' ] , stdin = u procesu. stdout ,
stdout = podproces . CIJEV , tekst = Pravi )
#Pohrani izlaz ulaznih i izlaznih procesa
izlaz , _ = izlazni_proces. komunicirati ( )
#Ispiši izlaz
ispisati ( 'Izlaz:' , izlaz )
Izlaz:
Nakon izvršavanja skripte pojavljuje se sljedeći izlaz:
Upravljajte podprocesom pomoću mjerača vremena
Stvorite Python datoteku sa sljedećom skriptom koja koristi mjerač vremena za izvršavanje naredbe pomoću podprocesa. Ovdje se blok “try-except” koristi za pokretanje mjerača vremena, a blok “finally” se koristi za otkazivanje mjerača vremena.
#Uvezite modul potprocesauvoz podproces
#Uvezite Timer modul
iz narezivanje navoja uvoz Timer
#Definirajte naredbu
cmd = [ 'ping' , 'www.example.com' ]
#Otvorite proces
str = podproces . Popen (
cmd , stdout = podproces . CIJEV , stderr = podproces . CIJEV )
#Definirajte mjerač vremena
mjerač vremena = Timer ( 2 , lambda proces: proces. ubiti ( ) , [ str ] )
probati :
#Pokrenite mjerač vremena
mjerač vremena. početak ( )
#Read output
stdout , _ = str. komunicirati ( )
#Izlaz za ispis
ispisati ( stdout. dekodirati ( ) )
osim :
#Ispiši poruku o pogrešci za pogrešno
ispisati ( 'Pogreška:' , sustav . exc_info ( ) )
konačno :
#Zaustavi mjerač vremena
mjerač vremena. otkazati ( )
Izlaz:
Nakon izvršavanja skripte pojavljuje se sljedeći izlaz:
Pročitajte Streaming Input
Napravite Python datoteku koja čita sadržaj izlaza potprocesa pomoću petlje 'while' i pohranjuje sadržaj u varijablu. Sadržaj ove varijable ispisuje se kasnije. Ovdje se naredba 'curl' koristi u podprocesu za www.google.com URL.
#Import moduluvoz podproces
#Definiraj naredbu
cmd = [ 'kovrča' , 'www.example.com' ]
str = podproces . Popen ( cmd , stdout = podproces . CIJEV ,
stderr = podproces . CIJEV , tekst = Pravi >
#Inicijaliziraj izlaznu varijablu
izlaz = ''
dok Pravi :
#Pročitajte izlaz procesa redak po redak
ul = str. stdout . linija za čitanje ( )
#Završi iz petlje kada podproces završi
ako ne u:
pauza
izlaz = izlaz + ln
#Ispiši liniju
ispisati ( izlaz )
# Dobijte povratni kod nakon završetka procesa
povratni_kod = str. čekati ( )
#Ispiši povratni kod
ispisati ( 'Povratni kod: ' , povratni_kod )
Izlaz:
Posljednji dio od tri izlaza prikazan je na sljedećoj slici. Povratni kod nakon završetka potprocesa je 0:
Zaključak
Različite upotrebe Python subprocess.Popen() prikazane su u ovom vodiču pomoću više Python skripti koje će pomoći Python korisnicima da upoznaju osnovne upotrebe ove funkcije.