學習
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的索引也可以是負數,這個索引從右向左技術,也就是從最後乙個元素開始技...