Sisällön aihe:
- Suorita yksinkertainen Linux-komento
- Suorita komento syöttötiedoilla
- Suorita Python-skripti
- Käsittele aliprosessivirhe
- Palauta aliprosessin koodi.Popen
- Ohjaa aliprosessin tulos tiedostoon
- Monikäsittely Subprocess.Popenin avulla
- Käsittele tulo- ja lähtövirtaa s
- Hallitse aikakatkaisua ja viivettä
- Lue suoratoistosyöte
Suorita yksinkertainen Linux-komento
Päivämäärä-komentoa käytetään nykyisen järjestelmän päivämäärän ja kellonajan näyttämiseen. Luo Python-tiedosto seuraavalla komentosarjalla, joka luo aliprosessin, joka suorittaa 'date'-komennon, ja tulosta tämän komennon tulos:
#Tuo moduulituonti osaprosessi
#Määritä komento aliprosessille ja
#avaa prosessi Popen()-funktiolla
ulostulo = osaprosessi . Popen ( [ 'Päivämäärä' ] , stdout = osaprosessi . PUTKI )
#Hae tulos ja virhe kommunikoimalla prosessin kanssa
stdout , stderr = ulostulo. kommunikoida ( )
#Tulosta tuloste
Tulosta ( stdout. purkaa ( ) )
Lähtö:
Seuraava tulos tulee näkyviin edellisen skriptin suorittamisen jälkeen:
Suorita komento syöttötiedoilla
'wc'-komentoa '-c'-vaihtoehdolla käytetään laskemaan tämän komennon sisältämän merkkijonoarvon merkkien kokonaismäärä. Luo Python-tiedosto seuraavalla komentosarjalla, joka luo aliprosessin Popen()-funktiolla 'wc –c' -komentojen suorittamista varten. Merkkijonon arvo otetaan päätteestä komentosarjan suorittamisen jälkeen ja syötemerkkijonon kokonaismerkit tulostetaan ulostuloon.
#Tuo moduulituonti osaprosessi
#Määritä komento aliprosessille ja
#Avaa prosessi Popen()-funktiolla
ulostulo = osaprosessi . Popen ( [ 'WC' , '-c' ] , stdout = osaprosessi . PUTKI )
#Hae tulos ja virhe kommunikoimalla prosessin kanssa
stdout , stderr = ulostulo. kommunikoida ( )
#Tulosta tuloste
Tulosta ( stdout. purkaa ( ) )
Lähtö:
Seuraava tulos tulee näkyviin 'Python Subprocess Examples' -syötearvolle:
Suorita Python-skripti
Luo Python-tiedosto nimeltä 'sum.py' seuraavalla komentosarjalla, joka laskee kahden luvun summan, ja nämä luvut annetaan komentoriviargumentteina:
sum.py
#Tuo tarvittava moduulituonti sys
#Laske argumentit yhteensä
n = vain ( sys . argv )
#Lisää kaksi ensimmäistä argumenttiarvoa
summa = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )
#Tulosta lisäystulos
Tulosta ( 'Summa ' + sys . argv [ 1 ] + 'ja' + sys . argv [ 2 ] + ' On' , summa )
Luo Python tiedosto kanssa seuraava komentosarja, joka suorittaa Pythonin tiedosto nimetty summa . py kanssa kaksi argumenttia luomalla a osaprosessi .
#Tuo moduuli
tuonti osaprosessi
#Suorita python-skripti aliprosessissa ja
#avaa prosessi Popen()-funktiolla
ulostulo = osaprosessi . Popen ( [ 'python3' , 'summa.py' , '25' , '55' ] , stdout = osaprosessi . PUTKI ) #Hae tulos ja virhe kommunikoimalla prosessin kanssa
stdout , stderr = ulostulo. kommunikoida ( )
#Tulosta tuloste
Tulosta ( stdout. purkaa ( ) )
Lähtö:
Seuraava tulos tulee näkyviin edellisen skriptin suorittamisen jälkeen:
`
Käsittele aliprosessivirhe
Luo Python-tiedosto seuraavalla komentosarjalla, joka käsittelee aliprosessin virheet käyttämällä 'try-except' -lohkoa. Käyttäjältä otetaan komento ja aliprosessi suorittaa sen. Virheviesti tulee näyttöön, jos käyttäjältä otetaan virheellinen komento.
#Tuo moduulittuonti osaprosessi
tuonti sys
#Ota komento käyttäjältä
komento = syöttö ( 'Anna kelvollinen komento:' )
yrittää :
#Avaa prosessi Popen()-funktiolla
ulostulo = osaprosessi . Popen ( [ komento ] , stdout = osaprosessi . PUTKI )
#Hae tulos ja virhe kommunikoimalla prosessin kanssa
stdout , stderr = ulostulo. kommunikoida ( )
#Tulosta tuloste
Tulosta ( stdout. purkaa ( ) )
paitsi :
Tulosta ( 'Virhe:' , sys . exc_info ( ) )
Lähtö:
Seuraava tulos tulee näkyviin, jos 'pwd'-komento otetaan syötteeksi, joka on kelvollinen komento:
Seuraava tulos tulee näkyviin, jos 'usr'-komento otetaan syötteeksi, joka on kelvollinen komento:
Palauta aliprosessikoodi.Popen
Luo Python-tiedosto seuraavalla komentosarjalla, joka suorittaa 'ls'-komennon aliprosessin kautta saadakseen luettelon kaikista Python-tiedostoista nykyisestä sijainnista. Skripti odottaa aliprosessin suorittamista loppuun ja tulostaa palautuskoodin.
#Tuo moduulittuonti osaprosessi
tuonti sys
#Aseta komento
komento = [ 'ls' , '-min' , '*.py' ]
yrittää :
#Avaa prosessi Popen()-funktiolla
ulostulo = osaprosessi . Popen ( komento , stdout = osaprosessi . PUTKI ,
stderr = osaprosessi . PUTKI , teksti = Totta )
#Odota, että prosessi on valmis
retCode = ulostulo. odota ( )
#Tulosta palautuskoodi
Tulosta ( 'Palautuskoodi:' , retCode )
paitsi :
#Tulosta virheilmoitus väärästä
Tulosta ( 'Virhe:' , sys . exc_info ( ) )
Lähtö:
Samanlainen tulos tulee näkyviin edellisen skriptin suorittamisen jälkeen:
Ohjaa aliprosessin tulos tiedostoon
Luo Python-tiedosto seuraavalla komentosarjalla, joka kirjoittaa aliprosessin tulosteen tekstitiedostoon. Aliprosessin suorittama komento otetaan käyttäjältä.
#Tuo moduulituonti osaprosessi
#Määritä tiedostonimi
Tiedoston nimi = 'outfile.txt'
#Ota ping-komento
cmd = syöttö ( 'Anna ping-komento:' )
#Jaa otettu syöte tilan perusteella
args = cmd . jakaa ( )
#Kirjoita komennon tulos tiedostoon
kanssa avata ( Tiedoston nimi , 'Sisään' ) kuten vanhentunutta tietoa:
käsitellä asiaa = osaprosessi . Popen ( args , stdout = vanhentunutta tietoa )
#Odota, että prosessi on valmis
paluukoodi = käsitellä asiaa. odota ( )
Lähtö:
Seuraavan lähdön mukaan 'ping -c 3 www.google.com ' -komento otetaan käyttäjältä ja 'cat' -komentoa käytetään aliprosessin kirjoittaman tiedoston sisällön näyttämiseen:
Monikäsittely Subprocess.Popenin avulla
Luo Python-tiedosto seuraavalla komentosarjalla, jossa näytetään moniprosessoinnin käyttö aliprosessin avulla. Tässä funktiota nimeltä display_msg() kutsutaan useita kertoja käyttämällä monikäsittelyä.
#Tuo tarvittavat moduulittuonti monikäsittely
tuonti osaprosessi
#Määritä funktio, jota moniprosessointi kutsuu
def display_msg ( n ) :
#Määritä komento format()-funktiolla
cmd = 'echo 'Python Programming'' . muoto ( n )
#Avaa prosessi Popen()-funktiolla
käsitellä asiaa = osaprosessi . Popen ( cmd , kuori = Totta , stdout = osaprosessi . PUTKI )
#Hae tulos ja virhe kommunikoimalla prosessin kanssa
stdout , virhe = käsitellä asiaa. kommunikoida ( )
#Tulosta tuloste
Tulosta ( stdout. purkaa ( ) )
#Kutsu toimintoa 5 kertaa luomalla multiprocessing.Pool
kanssa monikäsittely. Allas ( monikäsittely. cpu_count ( ) ) kuten mp:
#Kartoita funktio
sp. kartta ( display_msg , alue ( 1 , 5 ) )
Lähtö:
Seuraava tulos tulee näkyviin edellisen skriptin suorittamisen jälkeen:
Käsittele tulo- ja lähtövirtoja
Luo tekstitiedosto nimeltä 'test.txt', jossa on seuraava sisältö, ennen kuin luot tämän esimerkin Python-komentosarjan.
testi.txt
PERL
python
lyödä
php
Luo Python-tiedosto seuraavalla komentosarjalla, joka käyttää yhtä aliprosessia 'test.txt'-tiedoston sisällön lukemiseen ja toista aliprosessia tietyn sanan etsimiseen kyseisestä tekstitiedostosta. Tässä sanaa 'python' etsitään 'test.txt-tiedostosta', joka sisältää tämän sanan.
#Tuo moduulejatuonti osaprosessi
#Määritä syöttövirran prosessi
työn alla = osaprosessi . Popen ( [ 'kissa' , 'testi.txt' ] , stdout = osaprosessi . PUTKI , teksti = Tru > #Määritä tulosvirran prosessi
out_process = osaprosessi . Popen (
[ 'pito' , 'python' ] , stdin = työn alla. stdout ,
stdout = osaprosessi . PUTKI , teksti = Totta )
#Tallenna syöttö- ja lähtöprosessien tulos
ulostulo , _ = out_process. kommunikoida ( )
#Tulosta tuloste
Tulosta ( 'Tulostulo:' , ulostulo )
Lähtö:
Seuraava tulos tulee näkyviin komentosarjan suorittamisen jälkeen:
Ohjaa aliprosessia ajastimella
Luo Python-tiedosto seuraavalla komentosarjalla, joka käyttää ajastinta komennon suorittamiseen aliprosessin avulla. Tässä 'try-except' -lohkoa käytetään ajastimen käynnistämiseen ja lopuksi -lohkoa ajastimen peruuttamiseen.
#Tuo aliprosessimoduulituonti osaprosessi
#Tuo ajastinmoduuli
alkaen langoitus tuonti Ajastin
#Määritä komento
cmd = [ 'ping' , 'www.example.com' ]
#Avaa prosessi
s = osaprosessi . Popen (
cmd , stdout = osaprosessi . PUTKI , stderr = osaprosessi . PUTKI )
#Määritä ajastin
ajastin = Ajastin ( 2 , lambda prosessi: prosessi. tappaa ( ) , [ s ] )
yrittää :
#Käynnistä ajastin
ajastin. alkaa ( )
#Lue tulos
stdout , _ = s. kommunikoida ( )
#Tuloste
Tulosta ( stdout. purkaa ( ) )
paitsi :
#Tulosta virheilmoitus väärästä
Tulosta ( 'Virhe:' , sys . exc_info ( ) )
vihdoinkin :
#Pysäytä ajastin
ajastin. peruuttaa ( )
Lähtö:
Seuraava tulos tulee näkyviin komentosarjan suorittamisen jälkeen:
Lue suoratoistosyöte
Luo Python-tiedosto, joka lukee aliprosessin lähdön sisällön 'while'-silmukalla ja tallenna sisältö muuttujaan. Tämän muuttujan sisältö tulostetaan myöhemmin. Tässä 'curl'-komentoa käytetään aliprosessissa www.google.com URL-osoite.
#Tuo moduulituonti osaprosessi
#Määritä komento
cmd = [ 'kiemura' , 'www.example.com' ]
s = osaprosessi . Popen ( cmd , stdout = osaprosessi . PUTKI ,
stderr = osaprosessi . PUTKI , teksti = Totta >
#Alusta lähtömuuttuja
ulostulo = ''
sillä aikaa Totta :
#Lue prosessin tulos rivi riviltä
ln = s. stdout . Lue rivi ( )
#Lopeta silmukasta, kun aliprosessi on valmis
jos ei ln:
tauko
ulostulo = lähtö + ln
#Tulosta viiva
Tulosta ( ulostulo )
#Hae palautuskoodi prosessin päätyttyä
paluukoodi = s. odota ( )
#Tulosta palautuskoodi
Tulosta ( 'Palautuskoodi:' , paluukoodi )
Lähtö:
Kolmen lähdön viimeinen osa näkyy seuraavassa kuvassa. Paluukoodi aliprosessin suorittamisen jälkeen on 0:
Johtopäätös
Python-aliprosessin eri käyttötavat.Popen() esitetään tässä opetusohjelmassa käyttämällä useita Python-skriptejä, jotka auttavat Python-käyttäjiä tuntemaan tämän toiminnon peruskäytöt.