Príklady podprocesu Python.Popen

Priklady Podprocesu Python Popen



Podproces Pythonu je jedným z užitočných modulov, ktorý sa používa na spúšťanie rôznych príkazov shellu, procesov a spúšťanie iného skriptu alebo spustiteľných súborov pomocou skriptu Python. Dá sa použiť aj na presmerovanie dát z jedného procesu do druhého a spracovanie chýb, ktoré sú generované podriadenými procesmi. Modul podprocesov má mnoho tried, ktoré sa používajú na rôzne účely. Trieda „subprocess.Popen“ je jednou z tried tohto modulu, ktorá sa používa na interakciu s externými procesmi a vykonávanie rôznych typov úloh medzi procesmi. V tomto návode sú uvedené viaceré použitia triedy „subprocess.Popen“ v skripte Python.

Téma obsahu:

  1. Spustite jednoduchý príkaz Linux
  2. Spustite príkaz so vstupnými údajmi
  3. Spustite skript Python
  4. Spracovanie chyby podprocesu
  5. Vráťte kód Subprocess.Popen
  6. Presmerujte výstup podprocesu do súboru
  7. Viacnásobné spracovanie pomocou Subprocess.Popen
  8. Spravujte vstupný a výstupný tok s
  9. Ovládajte časový limit a oneskorenie
  10. Prečítajte si vstup zo streamovania

Spustite jednoduchý príkaz Linux

Príkaz „date“ sa používa na zobrazenie aktuálneho systémového dátumu a času. Vytvorte súbor Python pomocou nasledujúceho skriptu, ktorý vytvorí podproces, ktorý vykoná príkaz „date“ a vytlačí výstup tohto príkazu:

#Importujte modul

importovať podproces

#Definujte príkaz pre podproces a

#otvorený proces pomocou funkcie Popen().

výkon = podproces . Popen ( [ 'dátum' ] , stdout = podproces . RÚRA )

# Získajte výstup a chybu komunikáciou s procesom

stdout , stderr = výkon. komunikovať ( )

# Vytlačte výstup

vytlačiť ( stdout. dekódovať ( ) )

Výkon:







Po vykonaní predchádzajúceho skriptu sa zobrazí nasledujúci výstup:



  p1



Prejsť na začiatok





Spustite príkaz so vstupnými údajmi

Príkaz „wc“ s voľbou „-c“ sa používa na počítanie celkového počtu znakov hodnoty reťazca, ktorá je poskytnutá s týmto príkazom. Vytvorte súbor Python pomocou nasledujúceho skriptu, ktorý vytvorí podproces s funkciou Popen() na spustenie príkazov „wc –c“. Hodnota reťazca sa prevezme z terminálu po vykonaní skriptu a celkový počet znakov vstupného reťazca sa vytlačí na výstup.

#Importujte modul

importovať podproces

#Definujte príkaz pre podproces a

#Otvorte proces pomocou funkcie Popen().

výkon = podproces . Popen ( [ 'wc' , '-c' ] , stdout = podproces . RÚRA )

# Získajte výstup a chybu komunikáciou s procesom

stdout , stderr = výkon. komunikovať ( )

# Vytlačte výstup

vytlačiť ( stdout. dekódovať ( ) )

Výkon:



Pre vstupnú hodnotu „Príklady podprocesu Pythonu“ sa zobrazí nasledujúci výstup:

Prejsť na začiatok

Spustite skript Python

Vytvorte súbor Python s názvom „sum.py“ pomocou nasledujúceho skriptu, ktorý vypočítava súčet dvoch čísel a tieto čísla sú poskytnuté ako argumenty príkazového riadka:

sum.py

#Importujte potrebný modul

importovať sys

#Počítajte celkový počet argumentov

n = len ( sys . argv )

#Pridajte prvé dve hodnoty argumentov

súčet = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )

# Vytlačte výsledok sčítania

vytlačiť ( 'Súčet ' + sys . argv [ 1 ] + ' a ' + sys . argv [ 2 ] + ' je' , súčet )

Vytvorte Python súbor s nasledujúci skript, ktorý spustí Python súbor pomenovaný súčet . py s dva argumenty vytvorením a podproces .

#Importujte modul

importovať podproces

#Spustite skript python v podprocese a

#otvorte proces pomocou funkcie Popen().

výkon = podproces . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = podproces . RÚRA ) # Získajte výstup a chybu komunikáciou s procesom

stdout , stderr = výkon. komunikovať ( )

# Vytlačte výstup

vytlačiť ( stdout. dekódovať ( ) )

Výkon:

Po vykonaní predchádzajúceho skriptu sa zobrazí nasledujúci výstup:

Prejsť na začiatok

`

Riešenie chyby podprocesu

Vytvorte súbor Python pomocou nasledujúceho skriptu, ktorý spracováva chyby podprocesu pomocou bloku „try-except“. Príkaz sa prevezme od používateľa a vykoná ho podproces. Chybové hlásenie sa zobrazí, ak je od používateľa prijatý neplatný príkaz.

#Importujte moduly

importovať podproces

importovať sys

#Prevezmite príkaz od používateľa

príkaz = vstup ( 'Zadajte platný príkaz: ' )

skúste :

#Otvorte proces pomocou funkcie Popen().

výkon = podproces . Popen ( [ príkaz ] , stdout = podproces . RÚRA )

# Získajte výstup a chybu komunikáciou s procesom

stdout , stderr = výkon. komunikovať ( )

# Vytlačte výstup

vytlačiť ( stdout. dekódovať ( ) )

okrem :

vytlačiť ( 'Chyba:' , sys . exc_info ( ) )

Výkon:

Nasledujúci výstup sa zobrazí, ak sa príkaz „pwd“ berie ako vstup, ktorý je platným príkazom:

  p4-1

Nasledujúci výstup sa zobrazí, ak sa príkaz „usr“ berie ako vstup, ktorý je platným príkazom:

  p4-2

Prejsť na začiatok

Vráťte kód Subprocess.Popen

Vytvorte súbor Python pomocou nasledujúceho skriptu, ktorý vykoná príkaz „ls“ prostredníctvom podprocesu, aby ste získali zoznam všetkých súborov Python z aktuálneho umiestnenia. Skript čaká na dokončenie podprocesu a vytlačí návratový kód.

#Importujte moduly

importovať podproces

importovať sys

#Nastavte príkaz

príkaz = [ 'ls' , '-l' , '*.py' ]

skúste :

#Otvorte proces pomocou funkcie Popen().

výkon = podproces . Popen ( príkaz , stdout = podproces . RÚRA ,

stderr = podproces . RÚRA , text = Pravda )

#Počkajte na dokončenie procesu

retCode = výkon. počkaj ( )

#Vytlačte návratový kód

vytlačiť ( 'Spätný kód:' , retCode )

okrem :

#Vytlačte chybové hlásenie pre nesprávne

vytlačiť ( 'Chyba:' , sys . exc_info ( ) )

Výkon:

Podobný výstup sa objaví po vykonaní predchádzajúceho skriptu:

Prejsť na začiatok

Presmerujte výstup podprocesu do súboru

Vytvorte súbor Python pomocou nasledujúceho skriptu, ktorý zapíše výstup podprocesu do textového súboru. Príkaz, ktorý vykoná podproces, je prevzatý od používateľa.

#Importný modul

importovať podproces

#Definujte názov súboru

názov súboru = 'outfile.txt'

#Vykonajte príkaz ping

cmd = vstup ( 'Zadajte príkaz ping: ' )

#Rozdeľte prijatý vstup na základe priestoru

args = cmd . rozdeliť ( )

#Zapíšte výstup príkazu do súboru

s OTVORENÉ ( názov súboru , 'In' ) ako outdata:

proces = podproces . Popen ( args , stdout = outdata )

#Počkajte na dokončenie procesu

návratový_kód = proces. počkaj ( )

Výkon:

Podľa nasledujúceho výstupu je „ping -c 3 www.google.com ” príkaz je prevzatý od užívateľa a príkaz “cat” sa používa na zobrazenie obsahu súboru, ktorý je napísaný podprocesom:

Prejsť na začiatok

Multiprocessing pomocou Subprocess.Popen

Vytvorte súbor Python pomocou nasledujúceho skriptu, kde je znázornené použitie multiprocessingu pomocou podprocesu. Tu sa funkcia s názvom display_msg() volá viackrát pomocou multiprocesingu.

#Importujte potrebné moduly

importovať multiprocessing

importovať podproces

#Definujte funkciu, ktorá sa bude volať multiprocesingom

def display_msg ( n ) :

#Definujte príkaz pomocou funkcie format().

cmd = 'echo 'Python Programming'' . formát ( n )

#Otvorte proces pomocou funkcie Popen().

proces = podproces . Popen ( cmd , škrupina = Pravda , stdout = podproces . RÚRA )

# Získajte výstup a chybu komunikáciou s procesom

stdout , chyba = proces. komunikovať ( )

# Vytlačte výstup

vytlačiť ( stdout. dekódovať ( ) )

#Zavolajte funkciu 5-krát vytvorením multiprocessing.Pool

s multiprocessing. bazén ( multiprocessing. cpu_count ( ) ) ako mp:

#Zmapujte funkciu

t.t. mapa ( display_msg , rozsah ( 1 , 5 ) )

Výkon:

Po vykonaní predchádzajúceho skriptu sa zobrazí nasledujúci výstup:

Prejsť na začiatok

Spravujte vstupné a výstupné toky

Pred vytvorením skriptu Python z tohto príkladu vytvorte textový súbor s názvom „test.txt“ s nasledujúcim obsahom.

test.txt

PERL

pytón

bash

php

Vytvorte súbor Python pomocou nasledujúceho skriptu, ktorý používa jeden podproces na čítanie obsahu súboru „test.txt“ a ďalší podproces na vyhľadávanie konkrétneho slova v tomto textovom súbore. Tu sa slovo „python“ hľadá v „súbore test.txt“, ktorý obsahuje toto slovo.

#Import modulov

importovať podproces

#Definujte proces pre vstupný tok

v procese = podproces . Popen ( [ 'mačka' , 'test.txt' ] , stdout = podproces . RÚRA , text = Tru > # Definujte proces pre výstupný tok

out_process = podproces . Popen (

[ 'uchopenie' , 'python' ] , stdin = v procese. stdout ,

stdout = podproces . RÚRA , text = Pravda )

#Uložte výstup vstupných a výstupných procesov

výkon , _ = out_process. komunikovať ( )

# Vytlačte výstup

vytlačiť ( 'Výkon:' , výkon )

Výkon:

Po vykonaní skriptu sa zobrazí nasledujúci výstup:

Prejsť na začiatok

Ovládajte podproces pomocou časovača

Vytvorte súbor Python pomocou nasledujúceho skriptu, ktorý používa časovač na vykonanie príkazu pomocou podprocesu. Tu sa blok „try-okrem“ používa na spustenie časovača a blok „konečne“ sa používa na zrušenie časovača.

#Importujte modul podprocesu

importovať podproces

#Importujte modul Timer

od závitovanie importovať Časovač

#Definujte príkaz

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

#Otvorte proces

p = podproces . Popen (

cmd , stdout = podproces . RÚRA , stderr = podproces . RÚRA )

# Definujte časovač

časovač = Časovač ( 2 , lambda proces: proces. zabiť ( ) , [ p ] )

skúste :

#Spustite časovač

časovač. začať ( )

#Prečítajte si výstup

stdout , _ = p. komunikovať ( )

#Tlačový výstup

vytlačiť ( stdout. dekódovať ( ) )

okrem :

#Vytlačte chybové hlásenie pre nesprávne

vytlačiť ( 'Chyba:' , sys . exc_info ( ) )

konečne :

#Zastavte časovač

časovač. Zrušiť ( )

Výkon:

Po vykonaní skriptu sa zobrazí nasledujúci výstup:

Prejsť na začiatok

Prečítajte si vstup pre streamovanie

Vytvorte súbor Python, ktorý načíta obsah výstupu podprocesu pomocou cyklu „while“ a uloží obsah do premennej. Obsah tejto premennej sa vytlačí neskôr. Tu sa príkaz „curl“ používa v podprocese pre www.google.com URL.

#Importný modul

importovať podproces

#Definujte príkaz

cmd = [ 'kučera' , 'www.example.com' ]

p = podproces . Popen ( cmd , stdout = podproces . RÚRA ,

stderr = podproces . RÚRA , text = Pravda >

#Inicializujte výstupnú premennú

výkon = ''

zatiaľ čo Pravda :

# Prečítajte si výstup procesu riadok po riadku

ln = p. stdout . readline ( )

#Po dokončení podprocesu ukončite cyklus

ak nie ln:

prestávka

výkon = výstup + ln

#Vytlačte riadok

vytlačiť ( výkon )

#Po dokončení procesu získajte návratový kód

návratový_kód = p. počkaj ( )

#Vytlačte návratový kód

vytlačiť ( 'Spätný kód: ' , návratový_kód )

Výkon:

Posledná časť z troch výstupov je znázornená na nasledujúcom obrázku. Návratový kód po dokončení podprocesu je 0:

Prejsť na začiatok

Záver

Rôzne použitia podprocesu Python.Popen() sú uvedené v tomto návode pomocou viacerých skriptov Pythonu, ktoré pomôžu používateľom Pythonu poznať základné použitia tejto funkcie.