subprocess模塊
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,例如:
打印結(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:1subprocess.check_call()
直接打印系統(tǒng)命令的執(zhí)行結(jié)果,使用方法與subprocess.call()相同,只不過該函數(shù)會(huì)檢測(cè)返回狀態(tài)碼,如果為1,則會(huì)拋出subprocess.CalledProcessError錯(cuò)誤,例如:
打印結(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...語(yǔ)句做異常處理。
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,平均 = 0mssubprocess.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.stderrsubprocess.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ù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)名稱:python模塊--subprocess-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://jinyejixie.com/article28/coeijp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、小程序開發(fā)、軟件開發(fā)、網(wǎng)站導(dǎo)航
聲明:本網(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)
猜你還喜歡下面的內(nèi)容