Paksa ng Nilalaman:
- Magpatakbo ng Simple Linux Command
- Magpatakbo ng Command na may Input Data
- Magpatakbo ng Python Script
- Pangasiwaan ang Subprocess Error
- Ibalik ang Code of Subprocess.Popen
- I-redirect ang Output ng Subprocess sa File
- Multiprocessing Gamit ang Subprocess.Popen
- Pangasiwaan ang Input at Output Stream s
- Kontrolin ang Timeout at Delay
- Magbasa ng Streaming Input
Magpatakbo ng Simple Linux Command
Ang utos na 'petsa' ay ginagamit upang ipakita ang kasalukuyang petsa at oras ng system. Gumawa ng Python file na may sumusunod na script na lumilikha ng subprocess na nagpapatupad ng command na 'date' at i-print ang output ng command na ito:
#Import ang moduleangkat subprocess
#Tukuyin ang isang utos para sa subprocess at
#bukas na proseso sa pamamagitan ng paggamit ng Popen() function
output = subprocess . Popen ( [ 'date' ] , stdout = subprocess . PIPE )
#Retrieve ang output at error sa pamamagitan ng pakikipag-ugnayan sa proseso
stdout , stderr = output. makipag-usap ( )
#I-print ang output
print ( stdout. mag-decode ( ) )
Output:
Lumilitaw ang sumusunod na output pagkatapos isagawa ang nakaraang script:
Magpatakbo ng Command na may Input Data
Ang command na 'wc' na may opsyon na '-c' ay ginagamit upang bilangin ang kabuuang bilang ng mga character ng string value na ibinigay kasama ng command na ito. Gumawa ng Python file na may sumusunod na script na lumilikha ng subprocess na may Popen() function para patakbuhin ang mga command na “wc –c”. Ang halaga ng string ay kinuha mula sa terminal pagkatapos isagawa ang script at ang kabuuang mga character ng input string ay naka-print sa output.
#Import ang moduleangkat subprocess
#Tukuyin ang isang utos para sa subprocess at
#Buksan ang proseso sa pamamagitan ng paggamit ng Popen() function
output = subprocess . Popen ( [ 'wc' , '-c' ] , stdout = subprocess . PIPE )
#Retrieve ang output at error sa pamamagitan ng pakikipag-ugnayan sa proseso
stdout , stderr = output. makipag-usap ( )
#I-print ang output
print ( stdout. mag-decode ( ) )
Output:
Lumilitaw ang sumusunod na output para sa halaga ng input na 'Mga Halimbawa ng Python Subprocess':
Magpatakbo ng Python Script
Lumikha ng Python file na pinangalanang 'sum.py' na may sumusunod na script na kinakalkula ang kabuuan ng dalawang numero at ang mga numerong ito ay ibinigay bilang mga argumento sa command-line:
sum.py
#Mag-import ng kinakailangang moduleangkat sys
#Bilangin ang kabuuang mga argumento
n = lamang ( sys . argv )
#Idagdag ang unang dalawang halaga ng argumento
kabuuan = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )
#I-print ang resulta ng karagdagan
print ( 'Ang kabuuan ng' + sys . argv [ 1 ] + 'at' + sys . argv [ 2 ] + 'ay' , kabuuan )
Lumikha ng Python file kasama ang sumusunod na script na magpapatakbo ng Python file pinangalanan kabuuan . py kasama dalawang argumento sa pamamagitan ng paglikha ng a subprocess .
#Import ang module
angkat subprocess
#Run python script sa subprocess at
#buksan ang proseso sa pamamagitan ng paggamit ng Popen() function
output = subprocess . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = subprocess . PIPE ) #Retrieve ang output at error sa pamamagitan ng pakikipag-ugnayan sa proseso
stdout , stderr = output. makipag-usap ( )
#I-print ang output
print ( stdout. mag-decode ( ) )
Output:
Lumilitaw ang sumusunod na output pagkatapos isagawa ang nakaraang script:
`
Pangasiwaan ang Subprocess Error
Gumawa ng Python file na may sumusunod na script na humahawak sa mga error ng subprocess gamit ang block na 'try-except'. Ang isang utos ay kinuha mula sa gumagamit at ito ay isinasagawa ng subprocess. Ang mensahe ng error ay ipinapakita kung ang anumang di-wastong utos ay kinuha mula sa user.
#Import ang mga moduleangkat subprocess
angkat sys
#Take command mula sa user
utos = input ( 'Magpasok ng wastong utos: ' )
subukan :
#Buksan ang proseso sa pamamagitan ng paggamit ng Popen() function
output = subprocess . Popen ( [ utos ] , stdout = subprocess . PIPE )
#Retrieve ang output at error sa pamamagitan ng pakikipag-ugnayan sa proseso
stdout , stderr = output. makipag-usap ( )
#I-print ang output
print ( stdout. mag-decode ( ) )
maliban sa :
print ( 'Error:' , sys . exc_info ( ) )
Output:
Ang sumusunod na output ay lilitaw kung ang 'pwd' na utos ay kinuha bilang input na isang wastong utos:
Ang sumusunod na output ay lilitaw kung ang 'usr' na utos ay kinuha bilang input na isang wastong utos:
Ibalik ang Code of Subprocess.Popen
Gumawa ng Python file na may sumusunod na script na nagpapatupad ng command na 'ls' sa pamamagitan ng subprocess para makuha ang listahan ng lahat ng Python file mula sa kasalukuyang lokasyon. Ang script ay naghihintay upang makumpleto ang subprocess at i-print ang return code.
#Import ang mga moduleangkat subprocess
angkat sys
#Itakda ang utos
utos = [ 'ls' , '-l' , '*.py' ]
subukan :
#Buksan ang proseso sa pamamagitan ng paggamit ng Popen() function
output = subprocess . Popen ( utos , stdout = subprocess . PIPE ,
stderr = subprocess . PIPE , text = totoo )
#Maghintay upang makumpleto ang proseso
retCode = output. maghintay ( )
#I-print ang return code
print ( 'Return Code:' , retCode )
maliban sa :
#Print error message para sa mali
print ( 'Error:' , sys . exc_info ( ) )
Output:
Lumilitaw ang isang katulad na output pagkatapos isagawa ang nakaraang script:
I-redirect ang Output ng Subprocess sa File
Gumawa ng Python file na may sumusunod na script na nagsusulat ng output ng subprocess sa isang text file. Ang utos na isinagawa ng subprocess ay kinuha mula sa user.
#Mag-import ng moduleangkat subprocess
#Tukuyin ang filename
filename = 'outfile.txt'
#Kumuha ng ping command
cmd = input ( 'Magpasok ng ping command: ' )
#Split ang kinuhang input batay sa espasyo
args = cmd . hati ( )
#Isulat ang output ng command sa file
kasama bukas ( filename , 'Sa' ) bilang outdata:
proseso = subprocess . Popen ( args , stdout = outdata )
#Maghintay para makumpleto ang proseso
return_code = proseso. maghintay ( )
Output:
Ayon sa sumusunod na output, ang 'ping -c 3 www.google.com Ang command na ” ay kinuha mula sa user at ang command na “cat” ay ginagamit upang ipakita ang nilalaman ng file na isinulat ng subprocess:
Multiprocessing Gamit ang Subprocess.Popen
Gumawa ng Python file na may sumusunod na script kung saan ipinapakita ang paggamit ng multiprocessing gamit ang subprocess. Dito, ang isang function na pinangalanang display_msg() ay tinatawag nang maraming beses gamit ang multiprocessing.
#Mag-import ng mga kinakailangang moduleangkat multiprocessing
angkat subprocess
#Tukuyin ang function na tatawagin sa pamamagitan ng multiprocessing
def display_msg ( n ) :
#Define ang command gamit ang format() function
cmd = 'echo 'Python Programming'' . pormat ( n )
#Buksan ang proseso sa pamamagitan ng paggamit ng Popen() function
proseso = subprocess . Popen ( cmd , kabibi = totoo , stdout = subprocess . PIPE )
#Retrieve ang output at error sa pamamagitan ng pakikipag-ugnayan sa proseso
stdout , pagkakamali = proseso. makipag-usap ( )
#I-print ang output
print ( stdout. mag-decode ( ) )
#Tawagan ang function nang 5 beses sa pamamagitan ng paggawa ng multiprocessing.Pool
kasama multiprocessing. Pool ( multiprocessing. cpu_count ( ) ) bilang mp:
#Map ang function
mp. mapa ( display_msg , saklaw ( 1 , 5 ) )
Output:
Lumilitaw ang sumusunod na output pagkatapos isagawa ang nakaraang script:
Pangasiwaan ang Input at Output Stream
Gumawa ng text file na pinangalanang 'test.txt' na may sumusunod na nilalaman bago gumawa ng Python script ng halimbawang ito.
test.txt
PERL
sawa
bash
php
Gumawa ng Python file na may sumusunod na script na gumagamit ng isang subprocess para basahin ang content ng “test.txt” file at isa pang subprocess para maghanap ng partikular na salita sa text file na iyon. Dito, hinahanap ang salitang 'python' sa 'test.txt file' na naglalaman ng salitang ito.
#Mag-import ng mga moduleangkat subprocess
#Tukuyin ang isang proseso para sa input stream
pinoproseso = subprocess . Popen ( [ 'pusa' , 'test.txt' ] , stdout = subprocess . PIPE , text = Tru > #Tukuyin ang isang proseso para sa output stream
out_process = subprocess . Popen (
[ 'hawakan' , 'python' ] , stdin = pinoproseso. stdout ,
stdout = subprocess . PIPE , text = totoo )
#Imbak ang output ng mga proseso ng input at output
output , _ = out_process. makipag-usap ( )
#I-print ang output
print ( 'Output:' , output )
Output:
Ang sumusunod na output ay lilitaw pagkatapos isagawa ang script:
Kontrolin ang Subprocess Gamit ang Timer
Gumawa ng Python file na may sumusunod na script na gumagamit ng timer para magsagawa ng command gamit ang subprocess. Dito, ang 'try-except' block ay ginagamit upang simulan ang timer at ang 'finally' block ay ginagamit upang kanselahin ang timer.
#Import ang subprocess moduleangkat subprocess
#Import ang module ng Timer
mula sa threading angkat Timer
#Tukuyin ang utos
cmd = [ 'ping' , 'www.example.com' ]
#Buksan ang proseso
p = subprocess . Popen (
cmd , stdout = subprocess . PIPE , stderr = subprocess . PIPE )
#Tukuyin ang timer
timer = Timer ( 2 , lambda proseso: proseso. pumatay ( ) , [ p ] )
subukan :
#Simulan ang timer
timer. simulan ( )
#Basahin ang output
stdout , _ = p. makipag-usap ( )
#I-print ang output
print ( stdout. mag-decode ( ) )
maliban sa :
#Print error message para sa mali
print ( 'Error:' , sys . exc_info ( ) )
sa wakas :
#Ihinto ang timer
timer. kanselahin ( )
Output:
Ang sumusunod na output ay lilitaw pagkatapos isagawa ang script:
Basahin ang Streaming Input
Gumawa ng Python file na nagbabasa ng content ng subprocess na output gamit ang 'while' loop at iimbak ang content sa isang variable. Ang nilalaman ng variable na ito ay ipi-print sa ibang pagkakataon. Dito, ang command na 'curl' ay ginagamit sa subprocess para sa www.google.com URL.
#Import ang moduleangkat subprocess
#Tukuyin ang utos
cmd = [ 'kulot' , 'www.example.com' ]
p = subprocess . Popen ( cmd , stdout = subprocess . PIPE ,
stderr = subprocess . PIPE , text = totoo >
#Initialize ang output variable
output = ''
habang totoo :
#Basahin ang proseso ng output linya sa linya
ln = p. stdout . Basahin ang linya ( )
#Wakasan mula sa loop kapag natapos ang subprocess
kung hindi sa:
pahinga
output = output + ln
#I-print ang linya
print ( output )
#Kunin ang return code pagkatapos matapos ang proseso
return_code = p. maghintay ( )
#I-print ang return code
print ( 'Return code: ' , return_code )
Output:
Ang huling bahagi ng tatlong mga output ay ipinapakita sa sumusunod na larawan. Ang return code pagkatapos makumpleto ang subprocess ay 0:
Konklusyon
Ang iba't ibang paggamit ng Python subprocess.Popen() ay ipinapakita sa tutorial na ito gamit ang maramihang Python script na makakatulong sa mga gumagamit ng Python na malaman ang mga pangunahing gamit ng function na ito.