Satura tēma:
- Palaidiet vienkāršu Linux komandu
- Palaidiet komandu ar ievades datiem
- Palaidiet Python skriptu
- Apstrādājiet apakšprocesa kļūdu
- Atgrieziet apakšprocesa kodu. Popen
- Novirziet apakšprocesa izvadi uz failu
- Daudzapstrāde, izmantojot apakšprocesu.Popen
- Rīkojieties ar ievades un izvades straumi s
- Kontrolējiet taimautu un aizkavi
- Lasīt straumēšanas ievadi
Palaidiet vienkāršu Linux komandu
Komanda “date” tiek izmantota, lai parādītu pašreizējo sistēmas datumu un laiku. Izveidojiet Python failu ar šādu skriptu, kas izveido apakšprocesu, kas izpilda komandu “date”, un izdrukājiet šīs komandas izvadi:
#Importējiet moduliimports apakšprocess
#Definējiet komandu apakšprocesam un
#atvērt procesu, izmantojot funkciju Popen().
izvade = apakšprocess . Popens ( [ 'datums' ] , stdout = apakšprocess . PIPE )
#Izgūstiet izvadi un kļūdu, sazinoties ar procesu
stdout , stderr = izvade. sazināties ( )
#Izdrukājiet izvadi
drukāt ( stdout. atšifrēt ( ) )
Izvade:
Pēc iepriekšējā skripta izpildes tiek parādīta šāda izvade:
Palaidiet komandu ar ievades datiem
Komanda “wc” ar opciju “-c” tiek izmantota, lai saskaitītu ar šo komandu nodrošinātās virknes vērtības kopējo rakstzīmju skaitu. Izveidojiet Python failu ar šādu skriptu, kas izveido apakšprocesu ar Popen() funkciju, lai palaistu komandas “wc –c”. Virknes vērtība tiek ņemta no termināļa pēc skripta izpildes, un ievades virknes kopējās rakstzīmes tiek izdrukātas izvadē.
#Importējiet moduliimports apakšprocess
#Definējiet komandu apakšprocesam un
#Atvērt procesu, izmantojot funkciju Popen().
izvade = apakšprocess . Popens ( [ 'tualete' , '-c' ] , stdout = apakšprocess . PIPE )
#Izgūstiet izvadi un kļūdu, sazinoties ar procesu
stdout , stderr = izvade. sazināties ( )
#Izdrukājiet izvadi
drukāt ( stdout. atšifrēt ( ) )
Izvade:
Ievades vērtībai “Python Subprocess Examples” tiek parādīta šāda izvade:
Palaidiet Python skriptu
Izveidojiet Python failu ar nosaukumu “sum.py” ar šādu skriptu, kas aprēķina divu skaitļu summu, un šie skaitļi tiek sniegti kā komandrindas argumenti:
sum.py
#Importējiet nepieciešamo moduliimports sys
#Saskaitiet kopējo argumentu skaitu
n = tikai ( sys . argv )
#Pievienojiet pirmās divas argumentu vērtības
summa = starpt ( sys . argv [ 1 ] ) + starpt ( sys . argv [ 2 ] )
#Izdrukājiet pievienošanas rezultātu
drukāt ( 'summa' + sys . argv [ 1 ] + ' un ' + sys . argv [ 2 ] + 'ir' , summa )
Izveidojiet Python failu ar šo skriptu, kas palaist Python failu nosaukts summa . py ar divus argumentus, izveidojot a apakšprocess .
#Importējiet moduli
imports apakšprocess
#Palaidiet python skriptu apakšprocesā un
#atveriet procesu, izmantojot funkciju Popen().
izvade = apakšprocess . Popens ( [ 'python3' , 'summa.py' , '25' , '55' ] , stdout = apakšprocess . PIPE ) #Izgūstiet izvadi un kļūdu, sazinoties ar procesu
stdout , stderr = izvade. sazināties ( )
#Izdrukājiet izvadi
drukāt ( stdout. atšifrēt ( ) )
Izvade:
Pēc iepriekšējā skripta izpildes tiek parādīta šāda izvade:
`
Apstrādājiet apakšprocesa kļūdu
Izveidojiet Python failu ar šādu skriptu, kas apstrādā apakšprocesa kļūdas, izmantojot bloku “mēģināt, izņemot”. Komanda tiek paņemta no lietotāja, un to izpilda apakšprocess. Kļūdas ziņojums tiek parādīts, ja no lietotāja tiek saņemta kāda nederīga komanda.
#Importējiet moduļusimports apakšprocess
imports sys
#Paņemiet komandu no lietotāja
komandu = ievade ( 'Ievadiet derīgu komandu:' )
mēģināt :
#Atvērt procesu, izmantojot funkciju Popen().
izvade = apakšprocess . Popens ( [ komandu ] , stdout = apakšprocess . PIPE )
#Izgūstiet izvadi un kļūdu, sazinoties ar procesu
stdout , stderr = izvade. sazināties ( )
#Izdrukājiet izvadi
drukāt ( stdout. atšifrēt ( ) )
izņemot :
drukāt ( 'Kļūda:' , sys . exc_info ( ) )
Izvade:
Ja komanda “pwd” tiek ņemta par ievadi, kas ir derīga komanda, tiek parādīta šāda izvade:
Ja komanda “usr” tiek ņemta par ievadi, kas ir derīga komanda, tiek parādīta šāda izvade:
Atgrieziet apakšprocesa kodu. Popen
Izveidojiet Python failu ar šādu skriptu, kas izpilda komandu “ls”, izmantojot apakšprocesu, lai iegūtu visu Python failu sarakstu no pašreizējās atrašanās vietas. Skripts gaida, lai pabeigtu apakšprocesu, un izdrukā atgriešanas kodu.
#Importējiet moduļusimports apakšprocess
imports sys
#Iestatiet komandu
komandu = [ 'ls' , '-es' , '*.py' ]
mēģināt :
#Atvērt procesu, izmantojot funkciju Popen().
izvade = apakšprocess . Popens ( komandu , stdout = apakšprocess . PIPE ,
stderr = apakšprocess . PIPE , tekstu = Taisnība )
#Pagaidiet, līdz process tiks pabeigts
retCode = izvade. pagaidi ( )
#Izdrukājiet atgriešanas kodu
drukāt ( 'Atgriešanas kods:' , retCode )
izņemot :
#Drukājiet kļūdas ziņojumu par nepareizu
drukāt ( 'Kļūda:' , sys . exc_info ( ) )
Izvade:
Līdzīga izvade parādās pēc iepriekšējā skripta izpildes:
Novirziet apakšprocesa izvadi uz failu
Izveidojiet Python failu ar šādu skriptu, kas apakšprocesa izvadi ieraksta teksta failā. Komanda, ko izpilda apakšprocess, tiek ņemta no lietotāja.
#Importēt moduliimports apakšprocess
#Definējiet faila nosaukumu
faila nosaukums = 'outfile.txt'
#Paņemiet ping komandu
cmd = ievade ( 'Ievadiet ping komandu:' )
#Sadaliet uzņemto ievadi, pamatojoties uz atstarpi
args = cmd . sadalīt ( )
# Ierakstiet failā komandas izvadi
ar atvērts ( faila nosaukums , 'iekšā' ) kā novecojuši dati:
process = apakšprocess . Popens ( args , stdout = novecojuši dati )
#Pagaidiet, līdz process tiks pabeigts
atgriešanas_kods = process. pagaidi ( )
Izvade:
Saskaņā ar šādu izvadi “ping -c 3 www.google.com ” komanda tiek ņemta no lietotāja, un komanda “cat” tiek izmantota, lai parādītu apakšprocesa rakstītā faila saturu:
Daudzapstrāde, izmantojot apakšprocesu.Popen
Izveidojiet Python failu ar šādu skriptu, kurā tiek parādīta daudzapstrādes izmantošana, izmantojot apakšprocesu. Šeit funkcija ar nosaukumu display_msg() tiek izsaukta vairākas reizes, izmantojot vairāku apstrādi.
#Importējiet nepieciešamos moduļusimports daudzapstrāde
imports apakšprocess
#Definējiet funkciju, kas tiks izsaukta ar vairāku apstrādi
def display_msg ( n ) :
#Definējiet komandu ar format() funkciju
cmd = 'echo 'Python Programming'' . formātā ( n )
#Atvērt procesu, izmantojot funkciju Popen().
process = apakšprocess . Popens ( cmd , apvalks = Taisnība , stdout = apakšprocess . PIPE )
#Izgūstiet izvadi un kļūdu, sazinoties ar procesu
stdout , kļūda = process. sazināties ( )
#Izdrukājiet izvadi
drukāt ( stdout. atšifrēt ( ) )
#Izsauciet funkciju 5 reizes, izveidojot multiprocesssing.Pool
ar daudzapstrāde. Baseins ( daudzapstrāde. cpu_count ( ) ) kā mp:
#Kartē funkciju
mp. karte ( display_msg , diapazons ( 1 , 5 ) )
Izvade:
Pēc iepriekšējā skripta izpildes tiek parādīta šāda izvade:
Rīkojieties ar ievades un izvades straumēm
Pirms šī piemēra Python skripta izveides izveidojiet teksta failu ar nosaukumu “test.txt” ar šādu saturu.
test.txt
PERL
pitons
bash
php
Izveidojiet Python failu ar šādu skriptu, kas izmanto vienu apakšprocesu, lai lasītu faila “test.txt” saturu, un citu apakšprocesu, lai meklētu konkrētu vārdu šajā teksta failā. Šeit vārds “python” tiek meklēts failā test.txt, kurā ir šis vārds.
#Importēt moduļusimports apakšprocess
#Definējiet ievades straumes procesu
procesā = apakšprocess . Popens ( [ 'kaķis' , 'test.txt' ] , stdout = apakšprocess . PIPE , tekstu = Tru > #Definējiet izvades straumes procesu
out_process = apakšprocess . Popens (
[ 'saķere' , 'pitons' ] , stdin = procesā. stdout ,
stdout = apakšprocess . PIPE , tekstu = Taisnība )
#Saglabājiet ievades un izvades procesu izvadi
izvade , _ = out_process. sazināties ( )
#Izdrukājiet izvadi
drukāt ( 'Izvade:' , izvade )
Izvade:
Pēc skripta izpildes tiek parādīta šāda izvade:
Kontrolējiet apakšprocesu, izmantojot taimeri
Izveidojiet Python failu ar šādu skriptu, kas izmanto taimeri, lai izpildītu komandu, izmantojot apakšprocesu. Šeit tiek izmantots bloks “izmēģināt”, lai palaistu taimeri, un bloks “beidzot” tiek izmantots, lai atceltu taimeri.
#Importējiet apakšprocesa moduliimports apakšprocess
#Importējiet taimera moduli
no vītņošana imports Taimeris
#Definējiet komandu
cmd = [ 'ping' , “www.example.com” ]
#Atveriet procesu
lpp = apakšprocess . Popens (
cmd , stdout = apakšprocess . PIPE , stderr = apakšprocess . PIPE )
#Definējiet taimeri
taimeris = Taimeris ( 2 , lambda process: process. nogalināt ( ) , [ lpp ] )
mēģināt :
#Sāciet taimeri
taimeris. sākt ( )
#Lasīt izvadi
stdout , _ = lpp. sazināties ( )
#Drukas izvade
drukāt ( stdout. atšifrēt ( ) )
izņemot :
#Drukājiet kļūdas ziņojumu par nepareizu
drukāt ( 'Kļūda:' , sys . exc_info ( ) )
beidzot :
#Apturiet taimeri
taimeris. atcelt ( )
Izvade:
Pēc skripta izpildes tiek parādīta šāda izvade:
Izlasiet straumēšanas ievadi
Izveidojiet Python failu, kas nolasa apakšprocesa izvades saturu, izmantojot cilpu “while”, un saglabājiet saturu mainīgajā. Šī mainīgā saturs tiek izdrukāts vēlāk. Šeit komanda “curl” tiek izmantota apakšprocesā www.google.com URL.
#Importēt moduliimports apakšprocess
#Definēt komandu
cmd = [ 'čokurošanās' , 'www.example.com' ]
lpp = apakšprocess . Popens ( cmd , stdout = apakšprocess . PIPE ,
stderr = apakšprocess . PIPE , tekstu = Taisnība >
#Inicializējiet izvades mainīgo
izvade = ''
kamēr Taisnība :
#Izlasiet procesa izvadi pēc rindas
ln = lpp. stdout . lasāmrinda ( )
#Pārtraukt cilpu, kad apakšprocess beidzas
ja nē ln:
pārtraukums
izvade = izeja + ln
#Izdrukājiet līniju
drukāt ( izvade )
#Saņemiet atgriešanas kodu pēc procesa pabeigšanas
atgriešanas_kods = lpp. pagaidi ( )
#Izdrukājiet atgriešanas kodu
drukāt ( 'Atgriešanas kods:' , atgriešanas_kods )
Izvade:
Pēdējā daļa no trim izvadiem ir parādīta nākamajā attēlā. Atgriešanas kods pēc apakšprocesa pabeigšanas ir 0:
Secinājums
Šajā apmācībā ir parādīti dažādi Python apakšprocesa.Popen() lietojumi, izmantojot vairākus Python skriptus, kas palīdzēs Python lietotājiem uzzināt šīs funkcijas pamata lietojumus.