Python Subprocess.Popen esimerkit

Python Subprocess Popen Esimerkit



Python-aliprosessi on yksi hyödyllisistä moduuleista, joita käytetään suorittamaan erilaisia ​​komentotulkkikomentoja, prosesseja ja suorittamaan muita komentosarjoja tai suoritettavia tiedostoja Python-komentosarjan avulla. Sitä voidaan käyttää myös tietojen uudelleenohjaamiseen prosessista toiseen ja aliprosessien synnyttämien virheiden käsittelyyn. Aliprosessimoduulissa on monia luokkia, joita käytetään eri tarkoituksiin. 'Subprocess.Popen' -luokka on yksi tämän moduulin luokista, jota käytetään vuorovaikutukseen ulkoisten prosessien kanssa ja erityyppisten tehtävien suorittamiseen prosessien kesken. Tässä opetusohjelmassa esitetään useita Python-komentosarjan 'subprocess.Popen'-luokan käyttötapoja.

Sisällön aihe:

  1. Suorita yksinkertainen Linux-komento
  2. Suorita komento syöttötiedoilla
  3. Suorita Python-skripti
  4. Käsittele aliprosessivirhe
  5. Palauta aliprosessin koodi.Popen
  6. Ohjaa aliprosessin tulos tiedostoon
  7. Monikäsittely Subprocess.Popenin avulla
  8. Käsittele tulo- ja lähtövirtaa s
  9. Hallitse aikakatkaisua ja viivettä
  10. 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 moduuli

tuonti 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:



  p1



Mennä huipulle





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 moduuli

tuonti 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:

Mennä huipulle

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 moduuli

tuonti 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:

Mennä huipulle

`

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 moduulit

tuonti 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:

  p4-1

Seuraava tulos tulee näkyviin, jos 'usr'-komento otetaan syötteeksi, joka on kelvollinen komento:

  p4-2

Mennä huipulle

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 moduulit

tuonti 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:

Mennä huipulle

Ohjaa aliprosessin tulos tiedostoon

Luo Python-tiedosto seuraavalla komentosarjalla, joka kirjoittaa aliprosessin tulosteen tekstitiedostoon. Aliprosessin suorittama komento otetaan käyttäjältä.

#Tuo moduuli

tuonti 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:

Mennä huipulle

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 moduulit

tuonti 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:

Mennä huipulle

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 moduuleja

tuonti 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:

Mennä huipulle

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 aliprosessimoduuli

tuonti 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:

Mennä huipulle

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 moduuli

tuonti 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:

Mennä huipulle

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.