學習Python(十二)

2021-06-17 20:24:26 字數 2123 閱讀 2104

學習

1.subprocess包

subprocess.call()

父程序等待子程序完成

返回退出資訊(returncode,相當於exit code,見linux程序基礎)

subprocess.check_call()

父程序等待子程序完成

返回0檢查退出資訊,如果returncode不為0,則舉出錯誤subprocess.calledprocesserror,該物件包含有returncode屬性,可用try...except...來檢查(見python錯誤處理)。

subprocess.check_output()

父程序等待子程序完成

返回子程序向標準輸出的輸出結果

檢查退出資訊,如果returncode不為0,則舉出錯誤subprocess.calledprocesserror,該物件包含有returncode屬性和output屬性,output屬性為標準輸出的輸出結果,可用try...except...來檢查。

out = subprocess.call(["ls", "-l"])

out = subprocess.call("ls -l", shell=true)

2.popen 方法

與上面的封裝不同,popen物件建立後,主程式不會自動等待子程序完成。我們必須呼叫物件的wait()方法,父程序才會等待 (也就是阻塞block):

child = subprocess.popen(["ping","-c","5","www.google.com"])

>>> ping www.google.com (173.194.127.179) 56(84) bytes of data.

64 bytes from hkg03s14-in-f19.1e100.net (173.194.127.179): icmp_seq=1 ttl=54 time=43.9 ms

child.wait()

child.poll()           # 檢查子程序狀態

child.kill()           # 終止子程序

child.send_signal()    # 向子程序傳送訊號

child.terminate()      # 終止子程序

子程序的pid儲存在child.pid

3. 子程序的文字流控制

(沿用child子程序) 子程序的標準輸入,標準輸出和標準錯誤也可以通過如下屬性表示:

child.stdin

child.stdout

child.stderr

import subprocess

child1 = subprocess.popen(["ls","-l"], stdout=subprocess.pipe)

child2 = subprocess.popen(["wc"], stdin=child1.stdout,stdout=subprocess.pipe)

out = child2.communicate()

print(out)

subprocess.pipe實際上為文字流提供乙個快取區。child1的stdout將文字輸出到快取區,隨後child2的stdin從該pipe中將文字讀取走。child2的輸出文字也被存放在pipe中,直到communicate()方法從pipe中讀取出pipe中的文字。

要注意的是,communicate()是popen物件的乙個方法,該方法會阻塞父程序,直到子程序完成。

通過使用subprocess包,我們可以執行外部程式。並將應用的結果輸出給python,並讓python繼續處理shell的功能(比如利用文字流連線各個應用),就可以在python中實現。

總結:

subprocess.call, subprocess.check_call(), subprocess.check_output()

subprocess.popen(), subprocess.pipe

popen.wait(), popen.communicate()

Python學習(十二)

1 類 class 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。2 方法 類中定義的函式。3 類變數 類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體之外。類變數通常不作為例項變數使用。5 方法重寫 如果從父類繼承的方法不能滿足子類的需求,可以...

Python學習筆記(十二)

1.語法錯誤和異常錯誤 while true print hello python error message file c programming eclipse project pythonstudy exception.py line 9 while true print hello pyth...

Python學習十二 序列

序列是一塊用於存放多個值的連續記憶體空間,並且按一定順序排列,每個值 稱為元素 都分配乙個位置,稱為索引或位置。序列中每個元素都有乙個編號,也稱為索引。這個索引是從0開始遞增的,即下標是從0開始,1 2 3 如下圖所示 python的索引也可以是負數,這個索引從右向左技術,也就是從最後乙個元素開始技...