Pythoni alamprotsess. Popen näited

Pythoni Alamprotsess Popen Naited



Pythoni alamprotsess on üks kasulikest moodulitest, mida kasutatakse Pythoni skripti kasutades erinevate shellikäskude, protsesside ja muude skriptide või käivitatavate failide käivitamiseks. Seda saab kasutada ka andmete ümbersuunamiseks ühest protsessist teise protsessi ja alamprotsesside tekitatud vigade käsitlemiseks. Alamprotsessimoodulil on palju klasse, mida kasutatakse erinevatel eesmärkidel. Klass “Subprocess.Popen” on üks selle mooduli klassidest, mida kasutatakse väliste protsessidega suhtlemiseks ja protsesside vahel erinevat tüüpi ülesannete täitmiseks. Selles õpetuses kuvatakse Pythoni skripti klassi „subprocess.Popen” mitu kasutust.

Sisu teema:

  1. Käivitage lihtne Linuxi käsk
  2. Käivitage sisendandmetega käsk
  3. Käivitage Pythoni skript
  4. Käsitsege alamprotsessi viga
  5. Tagasta alamprotsessi kood.Popen
  6. Suunake alamprotsessi väljund ümber faili
  7. Multitöötlus alamprotsessi abil.Popen
  8. Käsitsege sisend- ja väljundvoogu s
  9. Kontrollige ajalõpu ja viivitust
  10. Voogesituse sisendi lugemine

Käivitage lihtne Linuxi käsk

Käsku “date” kasutatakse praeguse süsteemi kuupäeva ja kellaaja kuvamiseks. Looge Pythoni fail järgmise skriptiga, mis loob alamprotsessi, mis täidab käsku 'date' ja printige selle käsu väljund:

#Impordi moodul

importida alamprotsess

#Määrake alamprotsessi jaoks käsk ja

#open protsess, kasutades funktsiooni Popen().

väljund = alamprotsess . Popen ( [ 'kuupäev' ] , stdout = alamprotsess . TORU )

#Tooge väljund ja tõrge protsessiga suheldes

stdout , stderr = väljund. suhelda ( )

#Prindi väljund

printida ( stdout. dekodeerida ( ) )

Väljund:







Pärast eelmise skripti käivitamist kuvatakse järgmine väljund:



  p1



Mine üles





Käivitage sisendandmetega käsk

Käsku “wc” koos valikuga “-c” kasutatakse selle käsuga kaasas oleva stringiväärtuse märkide koguarvu loendamiseks. Looge Pythoni fail järgmise skriptiga, mis loob alamprotsessi funktsiooniga Popen() käskude 'wc –c' käivitamiseks. Stringi väärtus võetakse terminalist pärast skripti täitmist ja väljundisse trükitakse sisendstringi tähemärgid kokku.

#Impordi moodul

importida alamprotsess

#Määrake alamprotsessi jaoks käsk ja

#Ava protsess Popen() funktsiooni abil

väljund = alamprotsess . Popen ( [ 'tualett' , '-c' ] , stdout = alamprotsess . TORU )

#Tooge väljund ja tõrge protsessiga suheldes

stdout , stderr = väljund. suhelda ( )

#Prindi väljund

printida ( stdout. dekodeerida ( ) )

Väljund:



Sisendväärtuse 'Python Subprocess Examples' jaoks kuvatakse järgmine väljund:

Mine üles

Käivitage Pythoni skript

Looge Pythoni fail nimega 'sum.py' järgmise skriptiga, mis arvutab kahe arvu summa ja need arvud esitatakse käsurea argumentidena:

sum.py

#Impordi vajalik moodul

importida sys

#Loendage argumente kokku

n = ainult ( sys . argv )

#Lisage kaks esimest argumendi väärtust

summa = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )

#Prindi lisamise tulemus

printida ( 'Summa ' + sys . argv [ 1 ] + ' ja ' + sys . argv [ 2 ] + ' on' , summa )

Looge Python faili koos järgmine skript, mis käivitab Pythoni faili nimega summa . py koos kaks argumenti, luues a alamprotsess .

#Impordi moodul

importida alamprotsess

#Käivita pythoni skript alamprotsessis ja

#avage protsess Popen() funktsiooni abil

väljund = alamprotsess . Popen ( [ 'python3' , 'summa.py' , '25' , '55' ] , stdout = alamprotsess . TORU ) #Tooge väljund ja tõrge protsessiga suheldes

stdout , stderr = väljund. suhelda ( )

#Prindi väljund

printida ( stdout. dekodeerida ( ) )

Väljund:

Pärast eelmise skripti käivitamist kuvatakse järgmine väljund:

Mine üles

`

Käsitsege alamprotsessi viga

Looge Pythoni fail järgmise skriptiga, mis käsitleb alamprotsessi vigu, kasutades plokki 'proovi välja arvatud'. Kasutajalt võetakse käsk ja alamprotsess täidab selle. Veateade kuvatakse, kui kasutajalt võetakse kehtetu käsk.

#Impordi moodulid

importida alamprotsess

importida sys

#Võtke kasutajalt käsk

käsk = sisend ( 'Sisestage kehtiv käsk:' )

proovi :

#Ava protsess Popen() funktsiooni abil

väljund = alamprotsess . Popen ( [ käsk ] , stdout = alamprotsess . TORU )

#Tooge väljund ja tõrge protsessiga suheldes

stdout , stderr = väljund. suhelda ( )

#Prindi väljund

printida ( stdout. dekodeerida ( ) )

välja arvatud :

printida ( 'Viga:' , sys . exc_info ( ) )

Väljund:

Järgmine väljund kuvatakse, kui käsk 'pwd' võetakse sisendiks, mis on kehtiv käsk:

  p4-1

Järgmine väljund kuvatakse, kui käsk 'usr' võetakse sisendiks, mis on kehtiv käsk:

  p4-2

Mine üles

Tagasta alamprotsessi kood.Popen

Looge Pythoni fail järgmise skriptiga, mis käivitab alamprotsessi kaudu käsu 'ls', et saada kõigi Pythoni failide loend praegusest asukohast. Skript ootab alamprotsessi lõpuleviimist ja prindib tagastuskoodi.

#Impordi moodulid

importida alamprotsess

importida sys

#Määrake käsk

käsk = [ 'ls' , '- mina' , '*.py' ]

proovi :

#Ava protsess Popen() funktsiooni abil

väljund = alamprotsess . Popen ( käsk , stdout = alamprotsess . TORU ,

stderr = alamprotsess . TORU , tekst = Tõsi )

#Oodake protsessi lõpuleviimist

retCode = väljund. oota ( )

#Prindige tagastuskood

printida ( 'Tagastuskood:' , retCode )

välja arvatud :

#Vale korral printige veateade

printida ( 'Viga:' , sys . exc_info ( ) )

Väljund:

Sarnane väljund ilmub pärast eelmise skripti täitmist:

Mine üles

Suunake alamprotsessi väljund ümber faili

Looge Pythoni fail järgmise skriptiga, mis kirjutab alamprotsessi väljundi tekstifaili. Alamprotsessi poolt täidetav käsk võetakse kasutajalt.

#Impordi moodul

importida alamprotsess

#Määrake failinimi

faili nimi = 'outfile.txt'

#Võtke pingi käsk

cmd = sisend ( 'Sisestage pingi käsk:' )

#Jagage võetud sisend ruumi alusel

args = cmd . poolitatud ( )

#Kirjutage faili käsu väljund

koos avatud ( faili nimi , 'sisse' ) nagu aegunud andmed:

protsessi = alamprotsess . Popen ( args , stdout = aegunud andmed )

#Oodake protsessi lõpuleviimist

tagastamise_kood = protsessi. oota ( )

Väljund:

Vastavalt järgmisele väljundile 'ping -c 3 www.google.com ” käsk võetakse kasutajalt ja käsku „cat” kasutatakse alamprotsessi poolt kirjutatud faili sisu kuvamiseks:

Mine üles

Multitöötlus alamprotsessi abil.Popen

Looge Pythoni fail järgmise skriptiga, kus näidatakse multitöötluse kasutamist alamprotsessi abil. Siin kutsutakse funktsiooni nimega display_msg() mitu korda, kasutades multitöötlust.

#Importige vajalikud moodulid

importida multitöötlus

importida alamprotsess

#Määratlege funktsioon, mida multitöötlus kutsub

def display_msg ( n ) :

#Defineerige käsk formaadi () funktsiooniga

cmd = 'echo 'Python Programming'' . vormingus ( n )

#Ava protsess Popen() funktsiooni abil

protsessi = alamprotsess . Popen ( cmd , kest = Tõsi , stdout = alamprotsess . TORU )

#Tooge väljund ja tõrge protsessiga suheldes

stdout , viga = protsessi. suhelda ( )

#Prindi väljund

printida ( stdout. dekodeerida ( ) )

#Kutsuge funktsiooni 5 korda, luues multiprocessing.Pool

koos multitöötlus. Bassein ( multitöötlus. cpu_count ( ) ) nagu mp:

#Kaardista funktsioon

mp. kaart ( display_msg , ulatus ( 1 , 5 ) )

Väljund:

Pärast eelmise skripti käivitamist kuvatakse järgmine väljund:

Mine üles

Käsitsege sisend- ja väljundvooge

Enne selle näite Pythoni skripti loomist looge järgmise sisuga tekstifail nimega 'test.txt'.

test.txt

PERL

püüton

bash

php

Looge Pythoni fail järgmise skriptiga, mis kasutab ühte alamprotsessi faili 'test.txt' sisu lugemiseks ja teist alamprotsessi, et otsida selles tekstifailis konkreetset sõna. Siin otsitakse sõna 'python' seda sõna sisaldavast 'test.txt failist'.

#Impordi moodulid

importida alamprotsess

#Defineerige sisendvoo protsess

protsessis = alamprotsess . Popen ( [ 'kass' , 'test.txt' ] , stdout = alamprotsess . TORU , tekst = Tõsi > #Määratlege väljundvoo jaoks protsess

out_process = alamprotsess . Popen (

[ 'haare' , 'püüton' ] , stdin = protsessis. stdout ,

stdout = alamprotsess . TORU , tekst = Tõsi )

#Salvestage sisend- ja väljundprotsesside väljund

väljund , _ = out_process. suhelda ( )

#Prindi väljund

printida ( 'Väljund:' , väljund )

Väljund:

Pärast skripti käivitamist kuvatakse järgmine väljund:

Mine üles

Alamprotsessi juhtimine taimeriga

Looge Pythoni fail järgmise skriptiga, mis kasutab alamprotsessi abil käsu täitmiseks taimerit. Siin kasutatakse taimeri käivitamiseks plokki 'proovi välja arvatud' ja taimeri tühistamiseks plokki 'lõpuks'.

#Impordi alamprotsessi moodul

importida alamprotsess

#Impordi taimeri moodul

alates keermestamine importida Taimer

#Defineerige käsk

cmd = [ 'ping' , 'www.example.com' ]

#Avage protsess

lk = alamprotsess . Popen (

cmd , stdout = alamprotsess . TORU , stderr = alamprotsess . TORU )

#Määrake taimer

taimer = Taimer ( 2 , lambda protsess: protsess. tappa ( ) , [ lk ] )

proovi :

#Käivitage taimer

taimer. alustada ( )

#Loe väljundit

stdout , _ = lk. suhelda ( )

#Prindiväljund

printida ( stdout. dekodeerida ( ) )

välja arvatud :

#Vale korral printige veateade

printida ( 'Viga:' , sys . exc_info ( ) )

lõpuks :

#Peatage taimer

taimer. tühistada ( )

Väljund:

Pärast skripti käivitamist kuvatakse järgmine väljund:

Mine üles

Lugege voogesituse sisendit

Looge Pythoni fail, mis loeb alamprotsessi väljundi sisu, kasutades 'while' tsüklit, ja salvestage sisu muutujasse. Selle muutuja sisu trükitakse hiljem. Siin kasutatakse käsku curl alamprotsessis www.google.com URL.

#Impordi moodul

importida alamprotsess

#Defineeri käsk

cmd = [ 'lokk' , 'www.example.com' ]

lk = alamprotsess . Popen ( cmd , stdout = alamprotsess . TORU ,

stderr = alamprotsess . TORU , tekst = Tõsi >

#Initsialiseeri väljundmuutuja

väljund = ''

samal ajal Tõsi :

#Lugege protsessi väljundit rida-realt

ln = lk. stdout . readline ( )

#Lõpetage tsüklist, kui alamprotsess on lõppenud

kui mitte ln:

murda

väljund = väljund + ln

#Prindi rida

printida ( väljund )

#Hankige tagastuskood pärast protsessi lõpetamist

tagastamise_kood = lk. oota ( )

#Prindige tagastuskood

printida ( 'Tagastuskood:' , tagastamise_kood )

Väljund:

Kolme väljundi viimane osa on näidatud järgmisel pildil. Tagastuskood pärast alamprotsessi lõpetamist on 0:

Mine üles

Järeldus

Selles õpetuses näidatakse Pythoni alamprotsessi erinevaid kasutusviise.Popen() kasutades mitut Pythoni skripti, mis aitavad Pythoni kasutajatel selle funktsiooni põhilisi kasutusviise tundma õppida.