Python Subprocess.Popen eksempler

Python Subprocess Popen Eksempler



Python-underprocessen er et af de nyttige moduler, der bruges til at køre forskellige shell-kommandoer, processer og udføre et andet script eller eksekverbare filer ved hjælp af Python-scriptet. Det kan også bruges til at omdirigere data fra én proces til en anden proces og håndtere de fejl, der genereres af de underordnede processer. Delprocesmodulet har mange klasser, der bruges til forskellige formål. Klassen 'subprocess.Popen' er en af ​​klasserne i dette modul, der bruges til at interagere med de eksterne processer og udføre forskellige typer opgaver blandt processerne. Flere anvendelser af klassen 'subprocess.Popen' i Python-scriptet er vist i denne vejledning.

Emne for indhold:

  1. Kør en simpel Linux-kommando
  2. Kør en kommando med inputdata
  3. Kør et Python-script
  4. Håndter underprocesfejlen
  5. Returner koden for Subprocess.Popen
  6. Omdiriger output fra underprocessen til fil
  7. Multiprocessing ved hjælp af Subprocess.Popen
  8. Håndter Input og Output Stream s
  9. Styr timeout og forsinkelse
  10. Læs et streaming-input

Kør en simpel Linux-kommando

Kommandoen 'dato' bruges til at vise den aktuelle systemdato og -klokkeslæt. Opret en Python-fil med følgende script, der opretter en underproces, der udfører kommandoen 'dato', og udskriv outputtet af denne kommando:

#Importer modulet

importere delproces

#Definer en kommando for underprocessen og

#åben proces ved at bruge Popen() funktion

produktion = delproces . Popen ( [ 'dato' ] , stdout = delproces . RØR )

#Hent output og fejl ved at kommunikere med processen

stdout , stderr = produktion. kommunikere ( )

#Udskriv output

Print ( stdout. afkode ( ) )

Produktion:







Følgende output vises efter udførelse af det forrige script:



  p1



Gå til toppen





Kør en kommando med inputdata

Kommandoen 'wc' med '-c'-indstillingen bruges til at tælle det samlede antal tegn i strengværdien, der leveres med denne kommando. Opret en Python-fil med følgende script, der opretter en underproces med Popen()-funktionen til at køre 'wc -c'-kommandoerne. Strengværdien tages fra terminalen efter eksekvering af scriptet, og det samlede antal tegn i inputstrengen udskrives i outputtet.

#Importer modulet

importere delproces

#Definer en kommando for underprocessen og

#Åbn proces ved at bruge Popen()-funktionen

produktion = delproces . Popen ( [ 'Toilet' , '-c' ] , stdout = delproces . RØR )

#Hent output og fejl ved at kommunikere med processen

stdout , stderr = produktion. kommunikere ( )

#Udskriv output

Print ( stdout. afkode ( ) )

Produktion:



Følgende output vises for inputværdien 'Python Subprocess Eksempler':

Gå til toppen

Kør et Python-script

Opret en Python-fil med navnet 'sum.py' med følgende script, der beregner summen af ​​to tal, og disse tal er angivet som kommandolinjeargumenter:

sum.py

#Importer nødvendigt modul

importere sys

#Tæl argumenter i alt

n = kun ( sys . argv )

#Tilføj de første to argumentværdier

sum = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )

#Udskriv tilføjelsesresultatet

Print ( 'Summen af ​​' + sys . argv [ 1 ] + 'og' + sys . argv [ 2 ] + 'er' , sum )

Opret en Python fil med følgende script, der vil køre en Python fil som hedder sum . py med to argumenter ved at skabe en delproces .

#Importer modulet

importere delproces

#Kør python-script i underprocessen og

#åbn processen ved at bruge Popen()-funktionen

produktion = delproces . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = delproces . RØR ) #Hent output og fejl ved at kommunikere med processen

stdout , stderr = produktion. kommunikere ( )

#Udskriv output

Print ( stdout. afkode ( ) )

Produktion:

Følgende output vises efter udførelse af det forrige script:

Gå til toppen

`

Håndter underprocesfejlen

Opret en Python-fil med følgende script, der håndterer fejlene i underprocessen ved hjælp af 'try-except'-blokken. En kommando tages fra brugeren, og den udføres af underprocessen. Fejlmeddelelsen vises, hvis en ugyldig kommando tages fra brugeren.

#Importer modulerne

importere delproces

importere sys

#Tag kommandoen fra brugeren

kommando = input ( 'Indtast en gyldig kommando:' )

prøve :

#Åbn proces ved at bruge Popen()-funktionen

produktion = delproces . Popen ( [ kommando ] , stdout = delproces . RØR )

#Hent output og fejl ved at kommunikere med processen

stdout , stderr = produktion. kommunikere ( )

#Udskriv output

Print ( stdout. afkode ( ) )

undtagen :

Print ( 'Fejl:' , sys . exc_info ( ) )

Produktion:

Følgende output vises, hvis kommandoen 'pwd' tages som input, der er en gyldig kommando:

  p4-1

Følgende output vises, hvis kommandoen 'usr' tages som input, der er en gyldig kommando:

  p4-2

Gå til toppen

Returner koden for Subprocess.Popen

Opret en Python-fil med følgende script, der udfører en 'ls'-kommando gennem underprocessen for at få listen over alle Python-filer fra den aktuelle placering. Scriptet venter på at fuldføre underprocessen og udskriver returkoden.

#Importer modulerne

importere delproces

importere sys

#Indstil kommandoen

kommando = [ 'ls' , '-l' , '*.py' ]

prøve :

#Åbn proces ved at bruge Popen()-funktionen

produktion = delproces . Popen ( kommando , stdout = delproces . RØR ,

stderr = delproces . RØR , tekst = Rigtigt )

#Vent med at fuldføre processen

retCode = produktion. vente ( )

#Udskriv returkoden

Print ( 'Returkode:' , retCode )

undtagen :

#Udskriv fejlmeddelelse for den forkerte

Print ( 'Fejl:' , sys . exc_info ( ) )

Produktion:

Et lignende output vises efter udførelse af det forrige script:

Gå til toppen

Omdiriger output fra underprocessen til fil

Opret en Python-fil med følgende script, der skriver output fra underprocessen i en tekstfil. Kommandoen, der udføres af underprocessen, tages fra brugeren.

#Importer modul

importere delproces

#Definer filnavnet

filnavn = 'outfile.txt'

#Tag en ping-kommando

cmd = input ( 'Indtast en ping-kommando:' )

#Opdel det taget input baseret på rummet

args = cmd . dele ( )

#Skriv kommandooutputtet i filen

med åben ( filnavn , 'I' ) som uddata:

behandle = delproces . Popen ( args , stdout = uddata )

#Vent på at fuldføre processen

returkode = behandle. vente ( )

Produktion:

Ifølge følgende output, 'ping -c 3 www.google.com kommandoen tages fra brugeren, og kommandoen 'cat' bruges til at vise indholdet af filen, der er skrevet af underprocessen:

Gå til toppen

Multiprocessing ved hjælp af Subprocess.Popen

Opret en Python-fil med følgende script, hvor brugen af ​​multiprocessing vises ved hjælp af subprocess. Her kaldes en funktion ved navn display_msg() flere gange ved hjælp af multiprocessing.

#Importer nødvendige moduler

importere multibearbejdning

importere delproces

#Definer den funktion, der vil blive kaldt ved multiprocessing

def display_msg ( n ) :

#Definer kommandoen med format()-funktionen

cmd = 'ekko 'Python-programmering'' . format ( n )

#Åbn proces ved at bruge Popen()-funktionen

behandle = delproces . Popen ( cmd , skal = Rigtigt , stdout = delproces . RØR )

#Hent output og fejl ved at kommunikere med processen

stdout , fejl = behandle. kommunikere ( )

#Udskriv output

Print ( stdout. afkode ( ) )

#Ring til funktionen 5 gange ved at oprette multiprocessing.Pool

med multibearbejdning. Pool ( multibearbejdning. cpu_count ( ) ) som mp:

#Kortlæg funktionen

smp. kort ( display_msg , rækkevidde ( 1 , 5 ) )

Produktion:

Følgende output vises efter udførelse af det forrige script:

Gå til toppen

Håndter input- og outputstrømmene

Opret en tekstfil med navnet 'test.txt' med følgende indhold, før du opretter Python-scriptet i dette eksempel.

test.txt

PERL

python

bash

php

Opret en Python-fil med følgende script, der bruger en underproces til at læse indholdet af 'test.txt'-filen og en anden underproces til at søge efter et bestemt ord i den tekstfil. Her søges efter ordet 'python' i 'test.txt-filen', der indeholder dette ord.

#Importer moduler

importere delproces

#Definer en proces for inputstrømmen

i gang = delproces . Popen ( [ 'kat' , 'test.txt' ] , stdout = delproces . RØR , tekst = Tru > #Definer en proces for outputstrømmen

ud_proces = delproces . Popen (

[ 'greb' , 'python' ] , stdin = i gang. stdout ,

stdout = delproces . RØR , tekst = Rigtigt )

#Gem output fra input- og outputprocesserne

produktion , _ = ud_proces. kommunikere ( )

#Udskriv output

Print ( 'Produktion:' , produktion )

Produktion:

Følgende output vises efter eksekvering af scriptet:

Gå til toppen

Styr underprocessen ved hjælp af en timer

Opret en Python-fil med følgende script, der bruger en timer til at udføre en kommando ved hjælp af en underproces. Her bruges 'try-except'-blokken til at starte timeren og 'endelig'-blokken bruges til at annullere timeren.

#Importer underprocesmodulet

importere delproces

#Importer Timer-modulet

fra trådning importere Timer

#Definer kommandoen

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

#Åbn processen

s = delproces . Popen (

cmd , stdout = delproces . RØR , stderr = delproces . RØR )

#Definer timeren

timer = Timer ( 2 , lambda proces: proces. dræbe ( ) , [ s ] )

prøve :

#Start timeren

timer. Start ( )

#Læs output

stdout , _ = s. kommunikere ( )

#Udskriv output

Print ( stdout. afkode ( ) )

undtagen :

#Udskriv fejlmeddelelse for den forkerte

Print ( 'Fejl:' , sys . exc_info ( ) )

endelig :

#Stop timeren

timer. afbestille ( )

Produktion:

Følgende output vises efter eksekvering af scriptet:

Gå til toppen

Læs streaminginputtet

Opret en Python-fil, der læser indholdet af subprocesoutputtet ved hjælp af en 'while'-løkke, og gem indholdet i en variabel. Indholdet af denne variabel udskrives senere. Her bruges 'curl'-kommandoen i underprocessen til www.google.com URL.

#Importer modul

importere delproces

#Definer kommando

cmd = [ 'krølle' , 'www.example.com' ]

s = delproces . Popen ( cmd , stdout = delproces . RØR ,

stderr = delproces . RØR , tekst = Rigtigt >

#Initialiser outputvariablen

produktion = ''

mens Rigtigt :

#Læs procesoutput linje for linje

ln = s. stdout . læselinje ( )

#Afslut fra løkken, når underprocessen er færdig

hvis ikke ln:

pause

produktion = output + ln

#Udskriv linjen

Print ( produktion )

#Få returkoden efter at have afsluttet processen

returkode = s. vente ( )

#Udskriv returkoden

Print ( 'Returkode: ' , returkode )

Produktion:

Den sidste del af de tre udgange er vist på det følgende billede. Returkoden efter fuldførelse af underprocessen er 0:

Gå til toppen

Konklusion

Forskellige anvendelser af Python-underprocessen.Popen() er vist i denne tutorial ved hjælp af flere Python-scripts, som vil hjælpe Python-brugerne med at kende de grundlæggende anvendelser af denne funktion.