Python Subprocess.Popen piemēri

Python Subprocess Popen Piemeri



Python apakšprocess ir viens no noderīgajiem moduļiem, ko izmanto, lai palaistu dažādas čaulas komandas, procesus un izpildītu citu skriptu vai izpildāmos failus, izmantojot Python skriptu. To var izmantot arī datu novirzīšanai no viena procesa uz citu procesu un bērnprocesu ģenerēto kļūdu apstrādei. Apakšprocesa modulim ir daudzas klases, kuras tiek izmantotas dažādiem mērķiem. “Subprocess.Popen” klase ir viena no šī moduļa klasēm, ko izmanto, lai mijiedarbotos ar ārējiem procesiem un veiktu dažāda veida uzdevumus starp procesiem. Šajā apmācībā ir parādīti vairāki “subprocess.Popen” klases lietojumi Python skriptā.

Satura tēma:

  1. Palaidiet vienkāršu Linux komandu
  2. Palaidiet komandu ar ievades datiem
  3. Palaidiet Python skriptu
  4. Apstrādājiet apakšprocesa kļūdu
  5. Atgrieziet apakšprocesa kodu. Popen
  6. Novirziet apakšprocesa izvadi uz failu
  7. Daudzapstrāde, izmantojot apakšprocesu.Popen
  8. Rīkojieties ar ievades un izvades straumi s
  9. Kontrolējiet taimautu un aizkavi
  10. 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 moduli

imports 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:



  p1



Iet uz augšu





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 moduli

imports 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:

Iet uz augšu

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 moduli

imports 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:

Iet uz augšu

`

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ļus

imports 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:

  p4-1

Ja komanda “usr” tiek ņemta par ievadi, kas ir derīga komanda, tiek parādīta šāda izvade:

  p4-2

Iet uz augšu

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ļus

imports 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:

Iet uz augšu

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 moduli

imports 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šā' ) 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:

Iet uz augšu

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ļus

imports 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 ( ) ) mp:

#Kartē funkciju

mp. karte ( display_msg , diapazons ( 1 , 5 ) )

Izvade:

Pēc iepriekšējā skripta izpildes tiek parādīta šāda izvade:

Iet uz augšu

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ļus

imports 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:

Iet uz augšu

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 moduli

imports 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:

Iet uz augšu

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 moduli

imports 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 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:

Iet uz augšu

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.