Python Subprocess.Popen pavyzdžiai

Python Subprocess Popen Pavyzdziai



Python subprocesas yra vienas iš naudingų modulių, kuris naudojamas įvairioms apvalkalo komandoms, procesams ir kitam scenarijui ar vykdomiesiems failams vykdyti naudojant Python scenarijų. Jis taip pat gali būti naudojamas duomenims peradresuoti iš vieno proceso į kitą ir tvarkyti klaidas, kurias generuoja antriniai procesai. Subprocesų modulis turi daugybę klasių, kurios naudojamos įvairiems tikslams. „Subprocess.Popen“ klasė yra viena iš šio modulio klasių, kuri naudojama sąveikauti su išoriniais procesais ir atlikti įvairių tipų užduotis tarp procesų. Šioje mokymo programoje parodyta daugybė „subprocess.Popen“ klasės „Python“ scenarijaus naudojimo būdų.

Turinio tema:

  1. Paleiskite paprastą Linux komandą
  2. Vykdykite komandą su įvesties duomenimis
  3. Paleiskite Python scenarijų
  4. Tvarkyti subproceso klaidą
  5. Grąžinkite subproceso kodą.Popen
  6. Peradresuokite subproceso išvestį į failą
  7. Daugiafunkcis apdorojimas naudojant subprocesus.Popen
  8. Tvarkykite įvesties ir išvesties srautą s
  9. Valdykite skirtąjį laiką ir delsą
  10. Skaityti srautinio perdavimo įvestį

Paleiskite paprastą Linux komandą

Komanda „data“ naudojama dabartinei sistemos datai ir laikui parodyti. Sukurkite Python failą su šiuo scenarijumi, kuris sukuria subprocesą, kuris vykdo komandą „data“, ir išspausdinkite šios komandos išvestį:

#Importuokite modulį

importuoti subprocesas

#Apibrėžkite subproceso komandą ir

#atidaryti procesą naudojant Popen() funkciją

išvestis = subprocesas . Popenas ( [ 'data' ] , stdout = subprocesas . VAMZDZIS )

#Gaukite išvestį ir klaidą bendraudami su procesu

stdout , stderr = išvestis. bendrauti ( )

#Atspausdinkite išvestį

spausdinti ( stdout. dekoduoti ( ) )

Išvestis:







Įvykdžius ankstesnį scenarijų pasirodo ši išvestis:



  p1



Eiti į viršų





Vykdykite komandą su įvesties duomenimis

Komanda „wc“ su parinktimi „-c“ naudojama bendram su šia komanda pateiktos eilutės reikšmės simbolių skaičiui skaičiuoti. Sukurkite Python failą su šiuo scenarijumi, kuris sukuria subprocesą su Popen () funkcija, kad paleistumėte „wc –c“ komandas. Eilutės reikšmė paimama iš terminalo, įvykdžius scenarijų, o išvestyje atspausdinami visi įvesties eilutės simboliai.

#Importuokite modulį

importuoti subprocesas

#Apibrėžkite subproceso komandą ir

#Atidaryti procesą naudodami Popen() funkciją

išvestis = subprocesas . Popenas ( [ 'wc' , '-c' ] , stdout = subprocesas . VAMZDZIS )

#Gaukite išvestį ir klaidą bendraudami su procesu

stdout , stderr = išvestis. bendrauti ( )

#Atspausdinkite išvestį

spausdinti ( stdout. dekoduoti ( ) )

Išvestis:



„Python Subprocess Examples“ įvesties reikšmei rodoma ši išvestis:

Eiti į viršų

Paleiskite Python scenarijų

Sukurkite Python failą pavadinimu „sum.py“ naudodami šį scenarijų, kuris apskaičiuoja dviejų skaičių sumą ir šie skaičiai pateikiami kaip komandinės eilutės argumentai:

sum.py

#Importuokite reikiamą modulį

importuoti sys

#Suskaičiuokite visus argumentus

n = tik ( sys . argv )

#Pridėkite pirmąsias dvi argumentų reikšmes

suma = tarpt ( sys . argv [ 1 ] ) + tarpt ( sys . argv [ 2 ] )

#Atspausdinkite pridėjimo rezultatą

spausdinti ( 'Suma ' + sys . argv [ 1 ] + 'ir' + sys . argv [ 2 ] + 'yra' , suma )

Sukurkite Python failą su šį scenarijų, kuris paleis Python failą pavadintas suma . py su du argumentai sukuriant a subprocesas .

#Importuokite modulį

importuoti subprocesas

#Paleiskite python scenarijų poprocese ir

#atidarykite procesą naudodami Popen() funkciją

išvestis = subprocesas . Popenas ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = subprocesas . VAMZDZIS ) #Gaukite išvestį ir klaidą bendraudami su procesu

stdout , stderr = išvestis. bendrauti ( )

#Atspausdinkite išvestį

spausdinti ( stdout. dekoduoti ( ) )

Išvestis:

Įvykdžius ankstesnį scenarijų pasirodo ši išvestis:

Eiti į viršų

`

Tvarkykite subproceso klaidą

Sukurkite Python failą su šiuo scenarijumi, kuris tvarko subproceso klaidas naudojant bloką „bandyti išskyrus“. Iš vartotojo paimama komanda ir ją vykdo subprocesas. Klaidos pranešimas rodomas, jei iš vartotojo paimama neteisinga komanda.

#Importuokite modulius

importuoti subprocesas

importuoti sys

#Paimkite komandą iš vartotojo

komandą = įvestis ( 'Įveskite galiojančią komandą:' )

bandyti :

#Atidaryti procesą naudodami Popen() funkciją

išvestis = subprocesas . Popenas ( [ komandą ] , stdout = subprocesas . VAMZDZIS )

#Gaukite išvestį ir klaidą bendraudami su procesu

stdout , stderr = išvestis. bendrauti ( )

#Atspausdinkite išvestį

spausdinti ( stdout. dekoduoti ( ) )

išskyrus :

spausdinti ( 'Klaida:' , sys . exc_info ( ) )

Išvestis:

Ši išvestis rodoma, jei komanda „pwd“ yra įvestis, kuri yra tinkama komanda:

  p4-1

Jei komanda „usr“ naudojama kaip įvestis, kuri yra tinkama komanda, pasirodo ši išvestis:

  p4-2

Eiti į viršų

Grąžinkite subproceso kodą.Popen

Sukurkite Python failą su šiuo scenarijumi, kuris vykdo komandą „ls“ per subprocesą, kad gautumėte visų Python failų sąrašą iš dabartinės vietos. Scenarijus laukia, kol užbaigs subprocesą, ir išspausdina grąžinimo kodą.

#Importuokite modulius

importuoti subprocesas

importuoti sys

#Nustatykite komandą

komandą = [ 'ls' , '-a' , '*.py' ]

bandyti :

#Atidaryti procesą naudodami Popen() funkciją

išvestis = subprocesas . Popenas ( komandą , stdout = subprocesas . VAMZDZIS ,

stderr = subprocesas . VAMZDZIS , tekstą = Tiesa )

#Palaukite, kol baigsite procesą

retCode = išvestis. laukti ( )

#Atspausdinkite grąžinimo kodą

spausdinti ( 'Grąžinimo kodas:' , retCode )

išskyrus :

#Spausdinkite klaidos pranešimą dėl neteisingo

spausdinti ( 'Klaida:' , sys . exc_info ( ) )

Išvestis:

Panaši išvestis pasirodo po ankstesnio scenarijaus vykdymo:

Eiti į viršų

Peradresuokite subproceso išvestį į failą

Sukurkite Python failą naudodami šį scenarijų, kuris įrašo subproceso išvestį į tekstinį failą. Komanda, kurią vykdo subprocesas, paimama iš vartotojo.

#Importuoti modulį

importuoti subprocesas

#Apibrėžkite failo pavadinimą

failo pavadinimas = 'outfile.txt'

#Paimkite ping komandą

cmd = įvestis ( 'Įveskite ping komandą:' )

#Padalinkite gautą įvestį pagal erdvę

args = cmd . padalintas ( )

#Įrašykite komandos išvestį į failą

su atviras ( failo pavadinimas , 'į' ) kaip pasenę duomenys:

procesas = subprocesas . Popenas ( args , stdout = pasenę duomenys )

#Palaukite, kol procesas bus baigtas

grąžinimo_kodas = procesas. laukti ( )

Išvestis:

Pagal šią išvestį „ping -c 3 www.google.com “ komanda paimama iš vartotojo, o komanda „cat“ naudojama failo, kurį parašė subprocesas, turiniui rodyti:

Eiti į viršų

Daugiafunkcis apdorojimas naudojant subprocesus.Popen

Sukurkite Python failą su šiuo scenarijumi, kuriame rodomas kelių apdorojimo naudojimas naudojant subprocesą. Čia funkcija, pavadinta display_msg(), iškviečiama kelis kartus naudojant daugiafunkcinį apdorojimą.

#Importuokite reikiamus modulius

importuoti daugiafunkcinis apdorojimas

importuoti subprocesas

#Apibrėžkite funkciją, kuri bus iškviesta kelių apdorojimo būdu

def display_msg ( n ) :

#Apibrėžkite komandą naudodami format() funkciją

cmd = 'echo 'Python programavimas' . formatu ( n )

#Atidaryti procesą naudodami Popen() funkciją

procesas = subprocesas . Popenas ( cmd , apvalkalas = Tiesa , stdout = subprocesas . VAMZDZIS )

#Gaukite išvestį ir klaidą bendraudami su procesu

stdout , klaida = procesas. bendrauti ( )

#Atspausdinkite išvestį

spausdinti ( stdout. dekoduoti ( ) )

#5 kartus iškvieskite funkciją, sukurdami daugiafunkcinį apdorojimą.Pool

su daugiafunkcinis apdorojimas. Baseinas ( daugiafunkcinis apdorojimas. cpu_count ( ) ) kaip mp:

#Nustatykite funkciją

mp. žemėlapis ( display_msg , diapazonas ( 1 , 5 ) )

Išvestis:

Įvykdžius ankstesnį scenarijų pasirodo ši išvestis:

Eiti į viršų

Tvarkykite įvesties ir išvesties srautus

Prieš kurdami šio pavyzdžio Python scenarijų sukurkite tekstinį failą pavadinimu „test.txt“ su tokiu turiniu.

testas.txt

PERL

pitonas

bash

php

Sukurkite Python failą naudodami toliau pateiktą scenarijų, kuris naudoja vieną subprocesą „test.txt“ failo turiniui nuskaityti, o kitą – konkretaus žodžio tame tekstiniame faile paieškai. Čia žodžio „python“ ieškoma „test.txt faile“, kuriame yra šis žodis.

#Importuoti modulius

importuoti subprocesas

#Apibrėžkite įvesties srauto procesą

procese = subprocesas . Popenas ( [ 'katė' , 'testas.txt' ] , stdout = subprocesas . VAMZDZIS , tekstą = Tiesa > #Apibrėžkite išvesties srauto procesą

out_process = subprocesas . Popenas (

[ 'sugriebimas' , 'python' ] , stdin = procese. stdout ,

stdout = subprocesas . VAMZDZIS , tekstą = Tiesa )

#Išsaugokite įvesties ir išvesties procesų išvestį

išvestis , _ = out_process. bendrauti ( )

#Atspausdinkite išvestį

spausdinti ( 'Išvestis:' , išvestis )

Išvestis:

Įvykdžius scenarijų pasirodo ši išvestis:

Eiti į viršų

Valdykite subprocesą naudodami laikmatį

Sukurkite Python failą su šiuo scenarijumi, kuris naudoja laikmatį komandai vykdyti naudojant subprocesą. Čia blokas „bandyti, išskyrus“ naudojamas laikmačiui paleisti, o blokas „pagaliau“ naudojamas laikmačiui atšaukti.

#Importuokite subproceso modulį

importuoti subprocesas

#Importuokite laikmačio modulį

sriegimas importuoti Laikmatis

#Apibrėžkite komandą

cmd = [ 'ping' , „www.example.com“ ]

#Atidarykite procesą

p = subprocesas . Popenas (

cmd , stdout = subprocesas . VAMZDZIS , stderr = subprocesas . VAMZDZIS )

#Apibrėžkite laikmatį

laikmatis = Laikmatis ( 2 , lambda procesas: procesas. nužudyti ( ) , [ p ] )

bandyti :

#Paleiskite laikmatį

laikmatis. pradėti ( )

#Skaityti išvestį

stdout , _ = p. bendrauti ( )

#Spausdinimo išvestis

spausdinti ( stdout. dekoduoti ( ) )

išskyrus :

#Spausdinkite klaidos pranešimą dėl neteisingo

spausdinti ( 'Klaida:' , sys . exc_info ( ) )

pagaliau :

# Sustabdykite laikmatį

laikmatis. atšaukti ( )

Išvestis:

Įvykdžius scenarijų pasirodo ši išvestis:

Eiti į viršų

Skaitykite srautinio perdavimo įvestį

Sukurkite Python failą, kuris nuskaito subproceso išvesties turinį naudojant „while“ kilpą, ir išsaugokite turinį kintamajame. Šio kintamojo turinys išspausdinamas vėliau. Čia komanda „curl“ naudojama subprocese www.google.com URL.

#Importuoti modulį

importuoti subprocesas

#Apibrėžkite komandą

cmd = [ 'garbana' , „www.example.com“ ]

p = subprocesas . Popenas ( cmd , stdout = subprocesas . VAMZDZIS ,

stderr = subprocesas . VAMZDZIS , tekstą = Tiesa >

#Inicijuokite išvesties kintamąjį

išvestis = ''

kol Tiesa :

# Perskaitykite proceso išvestį eilutę po eilutės

ln = p. stdout . skaitymo linija ( )

#Nutraukti iš ciklo, kai baigsis subprocesas

jeigu ne ln:

pertrauka

išvestis = išėjimas + ln

#Atspausdinkite eilutę

spausdinti ( išvestis )

# Baigę procesą gaukite grąžinimo kodą

grąžinimo_kodas = p. laukti ( )

#Atspausdinkite grąžinimo kodą

spausdinti ( 'Grąžinimo kodas:' , grąžinimo_kodas )

Išvestis:

Paskutinė trijų išėjimų dalis parodyta kitame paveikslėlyje. Grąžinimo kodas užbaigus subprocesą yra 0:

Eiti į viršų

Išvada

Įvairūs Python subprocess.Popen() naudojimo būdai rodomi šioje pamokoje, naudojant kelis Python scenarijus, kurie padės Python vartotojams sužinoti pagrindinius šios funkcijos naudojimo būdus.