Téma obsahu:
- Spustite jednoduchý príkaz Linux
- Spustite príkaz so vstupnými údajmi
- Spustite skript Python
- Spracovanie chyby podprocesu
- Vráťte kód Subprocess.Popen
- Presmerujte výstup podprocesu do súboru
- Viacnásobné spracovanie pomocou Subprocess.Popen
- Spravujte vstupný a výstupný tok s
- Ovládajte časový limit a oneskorenie
- 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 modulimportovať 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:
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 modulimportovať 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:
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ý modulimportovať 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:
`
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 modulyimportovať 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:
Nasledujúci výstup sa zobrazí, ak sa príkaz „usr“ berie ako vstup, ktorý je platným príkazom:
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 modulyimportovať 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:
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ý modulimportovať 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:
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é modulyimportovať 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:
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 modulovimportovať 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:
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 podprocesuimportovať 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:
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ý modulimportovať 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:
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.