Python Subprocess.Popen Primeri

Python Subprocess Popen Primeri



Podproces Python je eden od uporabnih modulov, ki se uporablja za zagon različnih lupinskih ukazov, procesov in izvajanje drugega skripta ali izvedljivih datotek z uporabo skripta Python. Uporablja se lahko tudi za preusmerjanje podatkov iz enega procesa v drug proces in obravnavanje napak, ki jih ustvarijo podrejeni procesi. Modul podprocesa ima veliko razredov, ki se uporabljajo za različne namene. Razred »subprocess.Popen« je eden od razredov tega modula, ki se uporablja za interakcijo z zunanjimi procesi in izvajanje različnih vrst nalog med procesi. V tej vadnici je prikazanih več uporab razreda »subprocess.Popen« v skriptu Python.

Tema vsebine:

  1. Zaženite preprost ukaz Linux
  2. Zaženite ukaz z vhodnimi podatki
  3. Zaženite skript Python
  4. Obravnavajte napako podprocesa
  5. Vrnite kodo podprocesa.Popen
  6. Preusmeri izhod podprocesa v datoteko
  7. Večprocesiranje z uporabo Subprocess.Popen
  8. Upravljajte vhodni in izhodni tok s
  9. Nadzorujte časovno omejitev in zakasnitev
  10. 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 modul

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



  p1



Pojdi na vrh





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 modul

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

Pojdi na vrh

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 modula

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

Pojdi na vrh

`

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 module

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

  p4-1

Naslednji izhod se pojavi, če je ukaz »usr« vzet kot vhod, ki je veljaven ukaz:

  p4-2

Pojdi na vrh

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 module

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

Pojdi na vrh

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 modul

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

Pojdi na vrh

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 modulov

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

Pojdi na vrh

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 module

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

Pojdi na vrh

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 podprocesa

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

Pojdi na vrh

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 modul

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

Pojdi na vrh

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.