Téma obsahu:
- Spusťte jednoduchý příkaz pro Linux
- Spusťte příkaz se vstupními daty
- Spusťte skript Python
- Zpracovat chybu podprocesu
- Vraťte kód Subprocess.Popen
- Přesměrujte výstup podprocesu do souboru
- Multiprocessing pomocí Subprocess.Popen
- Ovládejte vstupní a výstupní proud s
- Ovládejte časový limit a zpoždění
- Přečtěte si streamovaný vstup
Spusťte jednoduchý příkaz pro Linux
Příkaz „date“ se používá k zobrazení aktuálního systémového data a času. Vytvořte soubor Python pomocí následujícího skriptu, který vytvoří podproces, který provede příkaz „date“ a vytiskne výstup tohoto příkazu:
#Importujte modulimport podproces
#Definujte příkaz pro podproces a
#open proces pomocí funkce Popen().
výstup = podproces . Popen ( [ 'datum' ] , stdout = podproces . TRUBKA )
#Získejte výstup a chybu komunikací s procesem
stdout , stderr = výstup. komunikovat ( )
# Vytiskněte výstup
tisk ( stdout. dekódovat ( ) )
Výstup:
Po provedení předchozího skriptu se zobrazí následující výstup:
Spusťte příkaz se vstupními daty
Příkaz „wc“ s volbou „-c“ se používá k počítání celkového počtu znaků hodnoty řetězce, která je součástí tohoto příkazu. Vytvořte soubor Python pomocí následujícího skriptu, který vytvoří podproces s funkcí Popen() pro spouštění příkazů „wc –c“. Hodnota řetězce se převezme z terminálu po provedení skriptu a celkový počet znaků vstupního řetězce se vytiskne na výstup.
#Importujte modulimport podproces
#Definujte příkaz pro podproces a
#Otevřete proces pomocí funkce Popen().
výstup = podproces . Popen ( [ 'toaleta' , '-C' ] , stdout = podproces . TRUBKA )
#Získejte výstup a chybu komunikací s procesem
stdout , stderr = výstup. komunikovat ( )
# Vytiskněte výstup
tisk ( stdout. dekódovat ( ) )
Výstup:
Pro vstupní hodnotu „Příklady podprocesů Pythonu“ se zobrazí následující výstup:
Spusťte skript Python
Vytvořte soubor Python s názvem „sum.py“ pomocí následujícího skriptu, který vypočítá součet dvou čísel a tato čísla jsou poskytnuta jako argumenty příkazového řádku:
sum.py
#Importujte potřebný modulimport sys
#Spočítejte celkový počet argumentů
n = jen ( sys . argv )
#Přidejte první dvě hodnoty argumentu
součet = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )
# Vytiskněte výsledek sčítání
tisk ( 'Součet ' + sys . argv [ 1 ] + ' a ' + sys . argv [ 2 ] + ' je' , součet )
Vytvořte Python soubor s následující skript, který spustí Python soubor jmenoval součet . py s dva argumenty vytvořením a podproces .
#Importujte modul
import podproces
#Spusťte skript python v podprocesu a
#otevřete proces pomocí funkce Popen().
výstup = podproces . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = podproces . TRUBKA ) #Získejte výstup a chybu komunikací s procesem
stdout , stderr = výstup. komunikovat ( )
# Vytiskněte výstup
tisk ( stdout. dekódovat ( ) )
Výstup:
Po provedení předchozího skriptu se zobrazí následující výstup:
`
Zpracovat chybu podprocesu
Vytvořte soubor Python pomocí následujícího skriptu, který zpracovává chyby podprocesu pomocí bloku „try-except“. Příkaz je převzat od uživatele a je vykonán podprocesem. Chybová zpráva se zobrazí, pokud je od uživatele odebrán jakýkoli neplatný příkaz.
#Importujte modulyimport podproces
import sys
#Převzít příkaz od uživatele
příkaz = vstup ( 'Zadejte platný příkaz: ' )
Snaž se :
#Otevřete proces pomocí funkce Popen().
výstup = podproces . Popen ( [ příkaz ] , stdout = podproces . TRUBKA )
#Získejte výstup a chybu komunikací s procesem
stdout , stderr = výstup. komunikovat ( )
# Vytiskněte výstup
tisk ( stdout. dekódovat ( ) )
až na :
tisk ( 'Chyba:' , sys . exc_info ( ) )
Výstup:
Následující výstup se objeví, pokud je příkaz „pwd“ brán jako vstup, který je platným příkazem:
Následující výstup se objeví, pokud je příkaz „usr“ brán jako vstup, který je platným příkazem:
Vraťte kód Subprocess.Popen
Vytvořte soubor Python pomocí následujícího skriptu, který provede příkaz „ls“ prostřednictvím podprocesu, aby získal seznam všech souborů Python z aktuálního umístění. Skript čeká na dokončení podprocesu a vytiskne návratový kód.
#Importujte modulyimport podproces
import sys
#Nastavte příkaz
příkaz = [ 'ls' , '-l' , '*.py' ]
Snaž se :
#Otevřete proces pomocí funkce Popen().
výstup = podproces . Popen ( příkaz , stdout = podproces . TRUBKA ,
stderr = podproces . TRUBKA , text = Skutečný )
#Počkejte na dokončení procesu
retCode = výstup. Počkejte ( )
#Vytiskněte návratový kód
tisk ( 'Návratový kód:' , retCode )
až na :
#Vytiskněte chybovou zprávu
tisk ( 'Chyba:' , sys . exc_info ( ) )
Výstup:
Podobný výstup se objeví po provedení předchozího skriptu:
Přesměrujte výstup podprocesu do souboru
Vytvořte soubor Python pomocí následujícího skriptu, který zapíše výstup podprocesu do textového souboru. Příkaz, který je proveden podprocesem, je převzat od uživatele.
#Importní modulimport podproces
#Definujte název souboru
název souboru = 'outfile.txt'
#Proveďte příkaz ping
cmd = vstup ( 'Zadejte příkaz ping: ' )
#Rozdělit přijatý vstup na základě prostoru
argumenty = cmd . rozdělit ( )
#Zapište výstup příkazu do souboru
s OTEVŘENO ( název souboru , 'V' ) tak jako outdata:
proces = podproces . Popen ( argumenty , stdout = outdata )
#Počkejte na dokončení procesu
návratový_kód = proces. Počkejte ( )
Výstup:
Podle následujícího výstupu je „ping -c 3 www.google.com 'příkaz je převzat od uživatele a příkaz 'cat' se používá k zobrazení obsahu souboru, který je zapsán podprocesem:
Multiprocessing pomocí Subprocess.Popen
Vytvořte soubor Python pomocí následujícího skriptu, kde je ukázáno použití multiprocessingu pomocí subprocess. Zde je funkce s názvem display_msg() volána vícekrát pomocí multiprocesingu.
#Importujte potřebné modulyimport multiprocessing
import podproces
#Definujte funkci, která bude volána multiprocesingem
def display_msg ( n ) :
#Definujte příkaz pomocí funkce format().
cmd = 'echo 'Python Programming'' . formát ( n )
#Otevřete proces pomocí funkce Popen().
proces = podproces . Popen ( cmd , skořápka = Skutečný , stdout = podproces . TRUBKA )
#Získejte výstup a chybu komunikací s procesem
stdout , chyba = proces. komunikovat ( )
# Vytiskněte výstup
tisk ( stdout. dekódovat ( ) )
#Zavolejte funkci 5x vytvořením multiprocessing.Pool
s multiprocessing. Bazén ( multiprocessing. cpu_count ( ) ) tak jako mp:
#Zmapujte funkci
t.t. mapa ( display_msg , rozsah ( 1 , 5 ) )
Výstup:
Po provedení předchozího skriptu se zobrazí následující výstup:
Zvládejte vstupní a výstupní toky
Před vytvořením skriptu Python z tohoto příkladu vytvořte textový soubor s názvem „test.txt“ s následujícím obsahem.
test.txt
PERL
krajta
bash
php
Vytvořte soubor Python pomocí následujícího skriptu, který používá jeden podproces ke čtení obsahu souboru „test.txt“ a další podproces k vyhledávání konkrétního slova v tomto textovém souboru. Zde se slovo „python“ hledá v „souboru test.txt“, který toto slovo obsahuje.
#Import modulůimport podproces
#Definujte proces pro vstupní proud
v procesu = podproces . Popen ( [ 'kočka' , 'test.txt' ] , stdout = podproces . TRUBKA , text = Tru > #Definujte proces pro výstupní proud
out_process = podproces . Popen (
[ 'rukojeť' , 'krajta' ] , stdin = v procesu. stdout ,
stdout = podproces . TRUBKA , text = Skutečný )
#Uložte výstup vstupních a výstupních procesů
výstup , _ = out_process. komunikovat ( )
# Vytiskněte výstup
tisk ( 'Výstup:' , výstup )
Výstup:
Po spuštění skriptu se zobrazí následující výstup:
Ovládejte dílčí proces pomocí časovače
Vytvořte soubor Python pomocí následujícího skriptu, který používá časovač ke spuštění příkazu pomocí podprocesu. Zde se blok „try-except“ používá ke spuštění časovače a blok „konečně“ se používá ke zrušení časovače.
#Importujte modul podprocesuimport podproces
#Importujte modul Timer
z závitování import Časovač
#Definujte příkaz
cmd = [ 'ping' , 'www.example.com' ]
#Otevřete proces
p = podproces . Popen (
cmd , stdout = podproces . TRUBKA , stderr = podproces . TRUBKA )
# Definujte časovač
časovač = Časovač ( 2 , lambda proces: proces. zabít ( ) , [ p ] )
Snaž se :
#Spusťte časovač
časovač. Start ( )
#Přečtěte si výstup
stdout , _ = p. komunikovat ( )
#Tiskový výstup
tisk ( stdout. dekódovat ( ) )
až na :
#Vytiskněte chybovou zprávu
tisk ( 'Chyba:' , sys . exc_info ( ) )
Konečně :
#Zastavte časovač
časovač. zrušení ( )
Výstup:
Po spuštění skriptu se zobrazí následující výstup:
Přečtěte si vstup pro streamování
Vytvořte soubor Python, který čte obsah výstupu podprocesu pomocí smyčky „while“ a ukládá obsah do proměnné. Obsah této proměnné se vytiskne později. Zde je příkaz „curl“ použit v podprocesu pro www.google.com URL.
#Importní modulimport podproces
#Definovat příkaz
cmd = [ 'kučera' , 'www.example.com' ]
p = podproces . Popen ( cmd , stdout = podproces . TRUBKA ,
stderr = podproces . TRUBKA , text = Skutečný >
#Inicializujte výstupní proměnnou
výstup = ''
zatímco Skutečný :
#Přečtěte si výstup procesu řádek po řádku
ln = p. stdout . readline ( )
#Po dokončení podprocesu ukončete smyčku
-li ne ln:
přestávka
výstup = výstup + ln
#Vytiskněte řádek
tisk ( výstup )
#Po dokončení procesu získejte návratový kód
návratový_kód = p. Počkejte ( )
#Vytiskněte návratový kód
tisk ( 'Návratový kód: ' , návratový_kód )
Výstup:
Poslední část ze tří výstupů je znázorněna na následujícím obrázku. Návratový kód po dokončení dílčího procesu je 0:
Závěr
Různá použití Python subprocess.Popen() jsou ukázána v tomto tutoriálu pomocí více Python skriptů, které pomohou uživatelům Pythonu poznat základní použití této funkce.