subprocess模塊
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、羅平ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的羅平網(wǎng)站制作公司
subprocess模塊用于幫助我們?cè)趐ython代碼中去執(zhí)行一些系統(tǒng)命令,在執(zhí)行python程序時(shí),該模塊會(huì)創(chuàng)建出一個(gè)子進(jìn)程,來運(yùn)行外部程序。
該模塊擁有多個(gè)方法,具體如下:
subprocess.call()
直接打印系統(tǒng)命令的執(zhí)行結(jié)果,如果執(zhí)行成功,返回狀態(tài)碼為0,否則為1,例如:
#執(zhí)行成功 import subprocess CALL1 = subprocess.call('ping 127.0.0.1 -n 1',shell=True) print("Returncode:%d"%CALL1)
打印結(jié)果為:
正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù): 來自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128 127.0.0.1 的 Ping 統(tǒng)計(jì)信息: 數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 1,丟失 = 0 (0% 丟失), 往返行程的估計(jì)時(shí)間(以毫秒為單位): 最短 = 0ms,最長(zhǎng) = 0ms,平均 = 0ms Returncode:0
#執(zhí)行失敗 CALL2 = subprocess.call('ping 1.1.1.2 -n 1',shell=True) print("Returncode:%d"%CALL2)
打印結(jié)果為:
正在 Ping 1.1.1.2 具有 32 字節(jié)的數(shù)據(jù): 請(qǐng)求超時(shí)。 1.1.1.2 的 Ping 統(tǒng)計(jì)信息: 數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 0,丟失 = 1 (100% 丟失), Returncode:1
subprocess.check_call()
直接打印系統(tǒng)命令的執(zhí)行結(jié)果,使用方法與subprocess.call()相同,只不過該函數(shù)會(huì)檢測(cè)返回狀態(tài)碼,如果為1,則會(huì)拋出subprocess.CalledProcessError錯(cuò)誤,例如:
import subprocess # 執(zhí)行成功 # CHECK_CALL1 = subprocess.check_call('ping 127.0.0.1 -n 1',shell=True) # print(CHECK_CALL1) # 執(zhí)行失敗 CHECK_CALL2 = subprocess.check_call('ping 1.1.1.2 -n 1',shell=True) print(CHECK_CALL2)
打印結(jié)果為:
正在 Ping 1.1.1.2 具有 32 字節(jié)的數(shù)據(jù): 請(qǐng)求超時(shí)。 1.1.1.2 的 Ping 統(tǒng)計(jì)信息: 數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 0,丟失 = 1 (100% 丟失), Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/first/subprocess/check_call.py", line 7, in <module> CHECK_CALL2 = subprocess.check_call('ping 1.1.1.2 -n 1',shell=True) File "C:\Python3.6\lib\subprocess.py", line 291, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command 'ping 1.1.1.2 -n 1' returned non-zero exit status 1.
可以結(jié)合try...expect...語句做異常處理。
subprocess.check_output()
不會(huì)將系統(tǒng)命令的執(zhí)行結(jié)果直接打印出來,返回一個(gè)bytes類型的對(duì)象,該對(duì)象包含了系統(tǒng)命令的執(zhí)行結(jié)果,如果執(zhí)行失敗會(huì)拋出subprocess.CalledProcessError錯(cuò)誤,例如:
import subprocess #執(zhí)行成功 CHECK_OUTPUT1 = subprocess.check_output('ping 127.0.0.1 -n 1',shell=True) print(type(CHECK_OUTPUT1)) print(str(CHECK_OUTPUT1,'gbk'))
打印結(jié)果為:
<class 'bytes'> 正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù): 來自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128 127.0.0.1 的 Ping 統(tǒng)計(jì)信息: 數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 1,丟失 = 0 (0% 丟失), 往返行程的估計(jì)時(shí)間(以毫秒為單位): 最短 = 0ms,最長(zhǎng) = 0ms,平均 = 0ms
subprocess.Popen()
上面幾個(gè)函數(shù)都是Popen()的封裝,主進(jìn)程都會(huì)等待子進(jìn)程執(zhí)行完畢,Popen()創(chuàng)建的子進(jìn)程不會(huì)被等待,相當(dāng)于異步執(zhí)行。
1.Popen()創(chuàng)建的對(duì)象有多個(gè)方法,可以針對(duì)子進(jìn)程執(zhí)行個(gè)性化操作,例如:
import subprocess import time time.clock() POPEN1 = subprocess.Popen('ping 127.0.0.1 -n 10',shell=True) print(POPEN1) print(time.clock())
打印結(jié)果為:
<subprocess.Popen object at 0x02230810> 0.06108553745727746 #從時(shí)間上看,主程序很快就結(jié)束了
Popen()創(chuàng)建的對(duì)象方法包括:
POPEN1.poll() # 檢查子進(jìn)程狀態(tài) POPEN1.kill() # 終止子進(jìn)程 POPEN1.terminate() # 終止子進(jìn)程 POPEN1.send_signal() # 向子進(jìn)程發(fā)送信號(hào) pid屬性包含了子進(jìn)程的pid號(hào)
2.subprocess.Popen()另一個(gè)常用的功能是文本流控制,對(duì)應(yīng)的"標(biāo)準(zhǔn)輸入"、"標(biāo)準(zhǔn)輸出"、"標(biāo)準(zhǔn)錯(cuò)誤"分別是:
POPEN1.stdin POPEN1.stdout POPEN1.stderr
subprocess.PIPE(為文本流提供一個(gè)緩存區(qū))作為管道,可以用來連接標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)輸入,例如:
POPEN2 = subprocess.Popen('ping 127.0.0.1 -n 1',shell=True,stdout=subprocess.PIPE) STDOUT2 = POPEN2.stdout # print(str(STDOUT2.read(),'gbk')) POPEN3 = subprocess.Popen('findstr 數(shù)據(jù)包',shell=True,stdin=STDOUT2,stdout=subprocess.PIPE) STDOUT3 = POPEN3.stdout print(str(STDOUT3.read(),'gbk'))
執(zhí)行結(jié)果為:
數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 1,丟失 = 0 (0% 丟失),
網(wǎng)站欄目:python模塊--subprocess
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article10/pshpdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)