導讀
subprocess模塊是在Python2.4版本之後引入的,來調用外部命令,完成一些複雜的交互式操作
引入subprocess模塊目的是了替換下列方法或模塊的使用,並實現更高級的操作
os.systemos.popenos.popen2os.popen3os.popen4commands模塊subprocess.Popen類詳解
subprocess.Popen類實例創建一個新進程,用來執行一個外部命令,Popen是subprocess模塊底層一個實現類,subprocess模塊其他調用外部命令的高級方法都是基於Popen類封裝
所以subprocess.Popen類掌握瞭解非常重要!
subprocess.Popen類構造器
subprocess模塊高級函數
subprocess模塊高級函數涉及到:
subprocess.call()subprocess.check_call()subprocess.check_output()subprocess.getstatusoutput)subprocess.getoutput()subprocess.run()subprocess.call方法
subprocess.call(args, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
說明:在Python 2.4版本引入對方法,調用外部命令,返回命令狀態碼
使用示例:
subprocess.check_call方法
subprocess.check_call(args, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
說明:在Python 2.5版本引入的方法,與call方法類似,不同在於如果命令執行成功,返回狀態碼0,否則拋出
subprocess.CalledProcessError異常
使用示例:
subprocess.check_output方法
subprocess.check_output(args, stdin=None, stderr=None, shell=False, universal_newlines=False, timeout=None)
說明:在Python 2.7版本引入的方法,與call方法類似,返回執行的結果,如果執行異常,則拋出
subprocess.CalledProcessError異常
使用示例:
subprocess.getstatusoutput、subprocess.getoutput方法
subprocess.getstatusoutput(cmd) 調用外部命令,返回一個元組結構,第一個元素是命令執行狀態,第二個為執行結果subprocess.getoutput(cmd) 調用外部命令,返回執行的結果subprocess.run方法,subprocess.CompletedProcess類
subprocess.run(args, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)
subprocess.run()是Python3.5中新增的一個高級函數,調用外部命令,其返回值是
subprocess.CompletedPorcess類的實例
該
subprocess.CompletedProcess類表示一個已結束進程的狀態信息
subprocess.CompletedProcess類實例屬性有:
使用示例:
一些參數說明
以上高級方法,在使用上大同小異,方法參數基本一致:
args: 要執行的命令,可以是字符串,也可以是命令及各參數組成的序列shell:shell為True,args參數使用字符串
shell為True,args參數使用序列stdin, stdout, stderr 分別表示程序標準輸入、輸出、錯誤input,發送給子進程的數據,如沒有數據發送給子進程,input=None,如果universal_newlines=True,則input參數的數據類型必須是字符串check: check為True,進程退出狀態碼非0,則拋出CalledProcessError異常
使用建議
subprocess.run()、subprocess.call()、subprocess.check_call()、subprocess.check_output()等調用外部命令方法都是subprocess.Popen類封裝實現Python2.x中的commands模塊,在Python3中被徹底被移除,commands模塊下的getoutput()和getstatusoutput()函數被遷移到subprocess模塊下,即subprocess.getoutput()和subprocess.getstatusoutput()Python 2.4~Python 3.5之間,保證兼容性,推薦使用subprocess.call()方法Python 3.5版本以上,儘量使用subprocess.run()方法一些複雜操作,使用subprocess.call()、subprocess.check_call()、subprocess.check_output()和subprocess.run()沒法完成,可以使用subprocess.Popen類來完成複雜功能最後
如果內容有誤,歡迎評論區指正!
喜歡我的朋友們,麻煩點一波關注,謝謝!