歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python 調用系統命令

Python 調用系統命令

日期:2017/3/1 9:33:31   编辑:Linux編程

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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved