python模塊--subprocess-創(chuàng)新互聯(lián)

subprocess模塊      

創(chuàng)新互聯(lián)公司-專業(yè)網站定制、快速模板網站建設、高性價比興和網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式興和網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋興和地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。

    subprocess模塊用于幫助我們在python代碼中去執(zhí)行一些系統(tǒng)命令,在執(zhí)行python程序時,該模塊會創(chuàng)建出一個子進程,來運行外部程序。

    該模塊擁有多個方法,具體如下:

  • subprocess.call()
    直接打印系統(tǒng)命令的執(zhí)行結果,如果執(zhí)行成功,返回狀態(tài)碼為0,否則為1,例如:

#執(zhí)行成功 import subprocess CALL1 = subprocess.call('ping 127.0.0.1 -n 1',shell=True) print("Returncode:%d"%CALL1)

打印結果為:

正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù): 來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=128 127.0.0.1 的 Ping 統(tǒng)計信息:     數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 1,丟失 = 0 (0% 丟失), 往返行程的估計時間(以毫秒為單位):     最短 = 0ms,最長 = 0ms,平均 = 0ms Returncode:0#執(zhí)行失敗 CALL2 = subprocess.call('ping 1.1.1.2 -n 1',shell=True) print("Returncode:%d"%CALL2)

打印結果為:

正在 Ping 1.1.1.2 具有 32 字節(jié)的數(shù)據(jù): 請求超時。 1.1.1.2 的 Ping 統(tǒng)計信息:     數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 0,丟失 = 1 (100% 丟失), Returncode:1

  • subprocess.check_call()
    直接打印系統(tǒng)命令的執(zhí)行結果,使用方法與subprocess.call()相同,只不過該函數(shù)會檢測返回狀態(tài)碼,如果為1,則會拋出subprocess.CalledProcessError錯誤,例如:

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)

打印結果為:

正在 Ping 1.1.1.2 具有 32 字節(jié)的數(shù)據(jù): 請求超時。 1.1.1.2 的 Ping 統(tǒng)計信息:     數(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.

可以結合try...expect...語句做異常處理。

  • subprocess.check_output()

    不會將系統(tǒng)命令的執(zhí)行結果直接打印出來,返回一個bytes類型的對象,該對象包含了系統(tǒng)命令的執(zhí)行結果,如果執(zhí)行失敗會拋出subprocess.CalledProcessError錯誤,例如:

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'))

打印結果為:

<class 'bytes'> 正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù): 來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=128 127.0.0.1 的 Ping 統(tǒng)計信息:     數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 1,丟失 = 0 (0% 丟失), 往返行程的估計時間(以毫秒為單位):     最短 = 0ms,最長 = 0ms,平均 = 0ms

  • subprocess.Popen()

    上面幾個函數(shù)都是Popen()的封裝,主進程都會等待子進程執(zhí)行完畢,Popen()創(chuàng)建的子進程不會被等待,相當于異步執(zhí)行。

  1.Popen()創(chuàng)建的對象有多個方法,可以針對子進程執(zhí)行個性化操作,例如:

import subprocess import time time.clock() POPEN1 = subprocess.Popen('ping 127.0.0.1 -n 10',shell=True) print(POPEN1) print(time.clock())

打印結果為:

<subprocess.Popen object at 0x02230810> 0.06108553745727746 #從時間上看,主程序很快就結束了

Popen()創(chuàng)建的對象方法包括:

POPEN1.poll() # 檢查子進程狀態(tài) POPEN1.kill() # 終止子進程 POPEN1.terminate() # 終止子進程 POPEN1.send_signal() # 向子進程發(fā)送信號 pid屬性包含了子進程的pid號

  2.subprocess.Popen()另一個常用的功能是文本流控制,對應的"標準輸入"、"標準輸出"、"標準錯誤"分別是:

POPEN1.stdin POPEN1.stdout POPEN1.stderr

subprocess.PIPE(為文本流提供一個緩存區(qū))作為管道,可以用來連接標準輸出和標準輸入,例如:

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í)行結果為:

數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 1,丟失 = 0 (0% 丟失),

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網頁名稱:python模塊--subprocess-創(chuàng)新互聯(lián)
當前路徑:http://muchs.cn/article28/coeijp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供手機網站建設、網站建設、品牌網站建設、小程序開發(fā)軟件開發(fā)、網站導航

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站制作