os.system
os.spawn
os.popen
popen2
commands
這些東西統統將被subprocess取代,subprocess真的很好用,有沒有!
1、subprocess.call()
subprocess.call()參數是一個列表,如果想把shell命令以字符串的形式傳進來,需要添加shell=True這個參數。
>>> from subprocess import call
>>> call("df -h",shell=True)
Filesystem Size Used Avail Use% Mounted on
/dev/disk1 112G 75G 38G 67% /
0
如果不指定shell=True,需要傳遞一個列表作為參數
>>> call(['df','-h'])
Filesystem Size Used Avail Use% Mounted on
/dev/disk1 112G 75G 38G 67% /
0
返回值是shell的returncode
2、subprocess.Popen()
call方法是Popen的一個封裝,call 的返回值是shell的退出碼,Popen返回的是一個Popen對象。使用起來比較方便,但是是阻塞的,會一直等到call方法執行完,才能繼續執行。Popen是非阻塞的,相當於放到後台執行,如果需要拿到shell命令的標准輸出,錯誤輸出的時候,用Popen比較方便。
>>> from subprocess import Popen,PIPE
>>> pobj = Popen('ls -l',stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
>>> result = pobj.communicate()
此時result以一個列表的方式返回,result[0]為標准輸出,result[1]是錯誤輸出
>>> exitcode = pobj.poll()
>>> print exitcode
2
調用Popen對象的poll方法,返回shell退出碼
下面是封裝的一個方法,參數是要傳遞的命令,如果不添加shell=True,需要以列表的方式傳遞命令,否則,傳一個字符串。函數返回一個列表,分別是標准輸出,錯誤輸出和returncode
1 from subprocess import Popen,PIPE
def execcommand(commandstr):
process = Popen(commandstr,stdout=PIPE,stderr=PIPE,shell=True)
res = process.communicate()
toout = res[0]
toerr = res[1]
exitcode = process.poll()
result = [toout,toerr,exitcode]
return result
--------------------------------------分割線 --------------------------------------
CentOS上源碼安裝Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm
《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm
《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm
Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm
在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm
Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm
Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡