聊一聊 subprocess.check_output

python subprocess 模塊的 check_output 函數能夠用於執行一個shell命令,並返回命令的輸出內容。同Popen相比較,check_output 側重於獲取命令執行後的輸出內容,所以適合於執行可以快速得到相應的命令,由於check_output會阻塞程序,直到命令執行結束返回結果,爲此還增長了一個timeout參數來防止超時。python

以查看linux服務器的文件系統類型爲例,編寫代碼以下:linux

import subprocess


output = subprocess.check_output(['df', '-T'])
output = output.decode()
print(output)

check_output的返回值的類型是bytes, 若是想用str, 可使用decode方法進行解碼。shell

若是執行命令過程當中發生錯誤則會引起CalledProcessError,爲了安全起見,你應該捕獲異常並處理安全

import subprocess

try:
   output = subprocess.check_output(['df', 'T'], stderr=subprocess.STDOUT)
   output = output.decode()
   print(output)
except subprocess.CalledProcessError as e:
   out_bytes = e.output.decode()
   code = e.returncode
   print(code, out_bytes)

在上面的代碼裏,我增長了stderr參數,這是由於check_output只會將輸入到標準輸出的值返回,若是命令執行過程當中產生了一些錯誤輸出,那麼這部分就沒法獲取了,所以須要指定stderr 爲 subprocess.STDOUT, 這樣錯誤信息也會被收集。特別說明的是,這裏所說的錯誤輸出與CalledProcessError是風馬牛不相及的兩個事物,有錯誤輸出不表明命令執行出現了異常,就比如你使用logging模塊輸出ERROR日誌,可是你的程序還在正常運行,只不過是將錯誤信息與正常信息分開輸出而已。服務器


本文分享自微信公衆號 - coolpython(coolpython)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。微信

相關文章
相關標籤/搜索