Sisu teema:
- Käivitage lihtne Linuxi käsk
- Käivitage sisendandmetega käsk
- Käivitage Pythoni skript
- Käsitsege alamprotsessi viga
- Tagasta alamprotsessi kood.Popen
- Suunake alamprotsessi väljund ümber faili
- Multitöötlus alamprotsessi abil.Popen
- Käsitsege sisend- ja väljundvoogu s
- Kontrollige ajalõpu ja viivitust
- 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 moodulimportida 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:
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 moodulimportida 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:
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 moodulimportida 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:
`
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 moodulidimportida 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:
Järgmine väljund kuvatakse, kui käsk 'usr' võetakse sisendiks, mis on kehtiv käsk:
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 moodulidimportida 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:
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 moodulimportida 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:
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 moodulidimportida 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:
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 moodulidimportida 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:
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 moodulimportida 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:
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 moodulimportida 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:
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.