Tartalom témája:
- Futtasson egy egyszerű Linux-parancsot
- Futtasson egy parancsot a bemeneti adatokkal
- Futtasson egy Python-szkriptet
- Kezelje az alfolyamat hibát
- Adja vissza a részfolyamat kódját.Popen
- Irányítsa át az alfolyamat kimenetét a fájlba
- Multiprocessing Subprocess használatával.Popen
- Kezelje a bemeneti és kimeneti adatfolyamot s
- Az időtúllépés és a késleltetés szabályozása
- Streaming bemenet olvasása
Futtasson egy egyszerű Linux-parancsot
A „date” parancs az aktuális rendszerdátum és idő megjelenítésére szolgál. Hozzon létre egy Python-fájlt a következő szkripttel, amely létrehoz egy alfolyamatot, amely végrehajtja a „date” parancsot, és nyomtassa ki a parancs kimenetét:
#Importálja a modultimport részfolyamat
#Adjon meg egy parancsot az alfolyamathoz és
#nyissa meg a folyamatot a Popen() függvény használatával
Kimenet = részfolyamat . Popen ( [ 'dátum' ] , stdout = részfolyamat . CSŐ )
#A kimenet és a hiba visszakeresése a folyamattal való kommunikációval
stdout , stderr = Kimenet. kommunikálni ( )
#Nyomtassa ki a kimenetet
nyomtatás ( stdout. dekódolni ( ) )
Kimenet:
Az előző szkript végrehajtása után a következő kimenet jelenik meg:
Futtasson egy parancsot a bemeneti adatokkal
A „wc” parancs a „-c” kapcsolóval a parancshoz tartozó karakterlánc-érték teljes karakterszámának megszámlálására szolgál. Hozzon létre egy Python-fájlt a következő szkripttel, amely alfolyamatot hoz létre a Popen() függvénnyel a „wc –c” parancsok futtatásához. A karakterlánc értéke a script végrehajtása után kerül levételre a terminálról, és a bemeneti karakterlánc összes karaktere kinyomtatásra kerül a kimenetben.
#Importálja a modultimport részfolyamat
#Adjon meg egy parancsot az alfolyamathoz és
#Nyissa meg a folyamatot a Popen() függvény segítségével
Kimenet = részfolyamat . Popen ( [ 'WC' , '-c' ] , stdout = részfolyamat . CSŐ )
#A kimenet és a hiba visszakeresése a folyamattal való kommunikációval
stdout , stderr = Kimenet. kommunikálni ( )
#Nyomtassa ki a kimenetet
nyomtatás ( stdout. dekódolni ( ) )
Kimenet:
A következő kimenet jelenik meg a „Python Subprocess Examples” bemeneti értékhez:
Futtasson egy Python-szkriptet
Hozzon létre egy „sum.py” nevű Python-fájlt a következő szkripttel, amely két szám összegét számítja ki, és ezek a számok parancssori argumentumként jelennek meg:
sum.py
#Importálja a szükséges modultimport sys
#Számolja meg az összes argumentumot
n = csak ( sys . argv )
#Adja hozzá az első két argumentumértéket
összeg = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )
#Nyomtassa ki az összeadás eredményét
nyomtatás ( 'összege' + sys . argv [ 1 ] + 'és' + sys . argv [ 2 ] + 'van' , összeg )
Hozzon létre egy Pythont fájlt val vel a következő szkript, amely egy Pythont futtat fájlt nevezett összeg . py val vel két argumentum létrehozásával a részfolyamat .
#Importálja a modult
import részfolyamat
#Futtassa a python szkriptet az alfolyamatban és
#nyissa meg a folyamatot a Popen() függvény segítségével
Kimenet = részfolyamat . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = részfolyamat . CSŐ ) #A kimenet és a hiba visszakeresése a folyamattal való kommunikációval
stdout , stderr = Kimenet. kommunikálni ( )
#Nyomtassa ki a kimenetet
nyomtatás ( stdout. dekódolni ( ) )
Kimenet:
Az előző szkript végrehajtása után a következő kimenet jelenik meg:
`
Kezelje az alfolyamat hibát
Hozzon létre egy Python-fájlt a következő szkripttel, amely kezeli az alfolyamat hibáit a „try-except” blokk használatával. Egy parancsot vesz a felhasználó, és az alfolyamat végrehajtja. A hibaüzenet akkor jelenik meg, ha a felhasználó érvénytelen parancsot kapott.
#Importálja a modulokatimport részfolyamat
import sys
#Vegye át a parancsot a felhasználótól
parancs = bemenet ( 'Írjon be egy érvényes parancsot: ' )
próbáld ki :
#Nyissa meg a folyamatot a Popen() függvény segítségével
Kimenet = részfolyamat . Popen ( [ parancs ] , stdout = részfolyamat . CSŐ )
#A kimenet és a hiba visszakeresése a folyamattal való kommunikációval
stdout , stderr = Kimenet. kommunikálni ( )
#Nyomtassa ki a kimenetet
nyomtatás ( stdout. dekódolni ( ) )
kivéve :
nyomtatás ( 'Hiba:' , sys . exc_info ( ) )
Kimenet:
A következő kimenet jelenik meg, ha a „pwd” parancsot érvényes parancs bemenetként veszi:
A következő kimenet jelenik meg, ha az „usr” parancsot érvényes parancs bemenetként veszi:
Adja vissza a részfolyamat kódját.Popen
Hozzon létre egy Python-fájlt a következő szkripttel, amely egy „ls” parancsot hajt végre az alfolyamat során, hogy megkapja az összes Python-fájl listáját az aktuális helyről. A szkript vár az alfolyamat befejezésére, és kinyomtatja a visszatérési kódot.
#Importálja a modulokatimport részfolyamat
import sys
# Állítsa be a parancsot
parancs = [ 'ls' , '-én' , '*.py' ]
próbáld ki :
#Nyissa meg a folyamatot a Popen() függvény segítségével
Kimenet = részfolyamat . Popen ( parancs , stdout = részfolyamat . CSŐ ,
stderr = részfolyamat . CSŐ , szöveg = Igaz )
#Várja meg a folyamat befejezését
retCode = Kimenet. várjon ( )
#Nyomtassa ki a visszatérési kódot
nyomtatás ( 'Visszaküldési kód:' , retCode )
kivéve :
#Nyomtassa ki a hibaüzenetet a rosszért
nyomtatás ( 'Hiba:' , sys . exc_info ( ) )
Kimenet:
Hasonló kimenet jelenik meg az előző szkript végrehajtása után:
Irányítsa át az alfolyamat kimenetét a fájlba
Hozzon létre egy Python-fájlt a következő szkripttel, amely az alfolyamat kimenetét szövegfájlba írja. Az alfolyamat által végrehajtott parancs a felhasználótól származik.
#Modul importálásaimport részfolyamat
#Határozza meg a fájlnevet
fájl név = 'outfile.txt'
#Vegyél ki egy ping parancsot
cmd = bemenet ( 'Írjon be egy ping parancsot:' )
#Ossza fel a vett bemenetet a tér alapján
args = cmd . hasított ( )
#Írja be a parancs kimenetét a fájlba
val vel nyisd ki ( fájl név , 'Ban ben' ) mint elavult adatok:
folyamat = részfolyamat . Popen ( args , stdout = elavult adatok )
#Várja meg a folyamat befejezését
return_code = folyamat. várjon ( )
Kimenet:
A következő kimenet szerint a „ping -c 3 www.google.com ” parancs a felhasználótól származik, a „cat” parancs pedig az alfolyamat által írt fájl tartalmának megjelenítésére szolgál:
Multiprocessing Subprocess használatával.Popen
Hozzon létre egy Python-fájlt a következő szkripttel, ahol az alfolyamat használatával látható a többfeldolgozás használata. Itt a display_msg() nevű függvényt többszörös feldolgozással hívják meg.
#Importálja a szükséges modulokatimport több feldolgozás
import részfolyamat
#Határozza meg a többfeldolgozás által meghívott függvényt
def display_msg ( n ) :
#Határozza meg a parancsot a format() függvénnyel
cmd = 'echo 'Python programozás'' . formátum ( n )
#Nyissa meg a folyamatot a Popen() függvény segítségével
folyamat = részfolyamat . Popen ( cmd , héj = Igaz , stdout = részfolyamat . CSŐ )
#A kimenet és a hiba visszakeresése a folyamattal való kommunikációval
stdout , hiba = folyamat. kommunikálni ( )
#Nyomtassa ki a kimenetet
nyomtatás ( stdout. dekódolni ( ) )
#Hívja meg a függvényt 5-ször a multiprocessing.Pool létrehozásával
val vel több feldolgozás. Medence ( több feldolgozás. cpu_count ( ) ) mint mp:
#Térképezze fel a függvényt
mp. térkép ( display_msg , hatótávolság ( 1 , 5 ) )
Kimenet:
Az előző szkript végrehajtása után a következő kimenet jelenik meg:
Kezelje a bemeneti és kimeneti adatfolyamokat
A példa Python-szkriptjének létrehozása előtt hozzon létre egy „test.txt” nevű szövegfájlt a következő tartalommal.
teszt.txt
PERL
piton
bash
php
Hozzon létre egy Python-fájlt a következő szkripttel, amely egy alfolyamatot használ a „test.txt” fájl tartalmának beolvasására, egy másik alfolyamatot pedig egy adott szó keresésére a szövegfájlban. Itt a „python” szót keresi a „test.txt fájlban”, amely ezt a szót tartalmazza.
#Modulok importálásaimport részfolyamat
#Határozzon meg egy folyamatot a bemeneti adatfolyamhoz
folyamatban = részfolyamat . Popen ( [ 'macska' , 'teszt.txt' ] , stdout = részfolyamat . CSŐ , szöveg = Tru > #Határozzon meg egy folyamatot a kimeneti adatfolyamhoz
out_process = részfolyamat . Popen (
[ 'markolat' , 'piton' ] , stdin = folyamatban. stdout ,
stdout = részfolyamat . CSŐ , szöveg = Igaz )
# Tárolja a bemeneti és kimeneti folyamatok kimenetét
Kimenet , _ = out_process. kommunikálni ( )
#Nyomtassa ki a kimenetet
nyomtatás ( 'Kimenet:' , Kimenet )
Kimenet:
A következő kimenet jelenik meg a szkript végrehajtása után:
Az alfolyamat vezérlése időzítővel
Hozzon létre egy Python-fájlt a következő szkripttel, amely időzítőt használ egy parancs végrehajtásához egy alfolyamat segítségével. Itt a „try-except” blokk az időzítő indítására szolgál, a „végre” blokk pedig az időzítő törlésére szolgál.
#Importálja az alfolyamat modultimport részfolyamat
#Importálja az időzítő modult
tól től befűzés import Időzítő
#Határozza meg a parancsot
cmd = [ 'ping' , „www.example.com” ]
#Nyissa meg a folyamatot
p = részfolyamat . Popen (
cmd , stdout = részfolyamat . CSŐ , stderr = részfolyamat . CSŐ )
#Határozza meg az időzítőt
időzítő = Időzítő ( 2 , lambda folyamat: folyamat. megöl ( ) , [ p ] )
próbáld ki :
#Indítsa el az időzítőt
időzítő. Rajt ( )
#Kimenet olvasása
stdout , _ = p. kommunikálni ( )
#Nyomtatási kimenet
nyomtatás ( stdout. dekódolni ( ) )
kivéve :
#Nyomtassa ki a hibaüzenetet a rosszért
nyomtatás ( 'Hiba:' , sys . exc_info ( ) )
végül :
# Állítsa le az időzítőt
időzítő. megszünteti ( )
Kimenet:
A következő kimenet jelenik meg a szkript végrehajtása után:
Olvassa el a streaming bemenetet
Hozzon létre egy Python-fájlt, amely beolvassa az alfolyamat kimenetének tartalmát egy „while” ciklus segítségével, és tárolja a tartalmat egy változóban. Ennek a változónak a tartalma később kerül kinyomtatásra. Itt a „curl” parancs az alfolyamatban használatos a www.google.com URL.
#Modul importálásaimport részfolyamat
#Define parancs
cmd = [ 'becsavar' , 'www.example.com' ]
p = részfolyamat . Popen ( cmd , stdout = részfolyamat . CSŐ ,
stderr = részfolyamat . CSŐ , szöveg = Igaz >
#Inicializálja a kimeneti változót
Kimenet = ''
míg Igaz :
# Olvassa el a folyamat kimenetét soronként
ln = p. stdout . readline ( )
#Ha az alfolyamat befejeződik, fejezze be a ciklust
ha nem ln:
szünet
Kimenet = kimenet + ln
#Nyomtassa ki a sort
nyomtatás ( Kimenet )
#A folyamat befejezése után szerezze be a visszatérési kódot
return_code = p. várjon ( )
#Nyomtassa ki a visszatérési kódot
nyomtatás ( 'Visszatérési kód:' , return_code )
Kimenet:
A három kimenet utolsó része a következő képen látható. Az alfolyamat befejezése után a visszatérési kód 0:
Következtetés
Ebben az oktatóanyagban a Python-alfolyamat különböző felhasználási módjai láthatók. A Popen() több Python-szkriptet használ, amelyek segítenek a Python-felhasználóknak megismerni a függvény alapvető felhasználásait.