Python中执行外部命令
? ?有很多需求需要在Python中執(zhí)行shell命令、啟動(dòng)子進(jìn)程,并捕獲命令的輸出和退出狀態(tài)碼,類(lèi)似于Java中的Runtime類(lèi)庫(kù)。
subprocess模塊的使用:
? Python使用最廣泛的是標(biāo)準(zhǔn)庫(kù)的subprocess模塊,用來(lái)替換os.system(),os.spawn*(),os.popen*()和commands.*等模塊與函數(shù)。
使用subprocess最簡(jiǎn)單的方式就是用它提供的便利函數(shù),call,check_all與check_output,當(dāng)便利函數(shù)滿(mǎn)足不了要求再使用Popen類(lèi)。
1. call?
subprocess(args,*,stdin=None,stout=None,stderr=None,shell=False)
shell=True,Python會(huì)先運(yùn)行一個(gè)shell,再用shell解釋字符串,而不是傳遞一個(gè)列表。
2. check_call
? ?check_all與call類(lèi)似,只是遇到異常情況返回的形式不同,它會(huì)拋出subprocess.CalledProcessError異常
3. check_output
? ?這個(gè)便利函數(shù)是使用最多了,它可以獲取命令的結(jié)果,而不是退出狀態(tài)碼
如果想要捕捉退出狀態(tài)碼,可以通過(guò)拋出的subprocess.CalledProcessError異常
import subprocess try:output = subprocess.check_output('ls /zz',shell=True) except subprocess.CalledProcessError as e:output = e.outputcode = e.returncodeprint (code,output)執(zhí)行結(jié)果:
如果想捕獲命令的錯(cuò)誤輸出,需將錯(cuò)誤輸出重定向到標(biāo)準(zhǔn)輸出
subprocess.check_output(['cmd','arg1','arg2'],stderr=subprocess.STDOUT)
?
4. 使用Popen
下面的exexute_cmd函數(shù)對(duì)Popen,進(jìn)行了封裝,執(zhí)行成功,返回標(biāo)準(zhǔn)輸出和狀態(tài)碼,失敗是返回狀態(tài)碼和錯(cuò)誤輸出。
#!/usr/bin/python #coding=utf8 import subprocessdef execute_cmd(cmd):p = subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)stdout, stderr = p.communicate()if p.returncode != 0:return p.returncode, stderrreturn p.returncode, stdoutif __name__=='__main__':cmd='ls /u01'returncode,out=execute_cmd(cmd)if returncode != 0:raise SystemExit('execute {0} err :{1}'.format(cmd,out))else:print("execute command ({0} sucessful)".format(cmd))
目錄不存時(shí):
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/zydev/p/8673620.html
總結(jié)
以上是生活随笔為你收集整理的Python中执行外部命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iOS项目开发优秀文章汇总
- 下一篇: python_装饰器