python中呼叫linux系統命令容易遇到的坑+(os.system,os.popen,subprocess.Popen區別)
阿新 • • 發佈:2019-01-06
本人在編寫監控系統程序狀態的指令碼的時候,因為要涉及到呼叫系統命令檢視linux系統程序pid以及時間等,所以使用到了os.popen().read()來獲取返回值
然而呼叫命令發現無法獲取到任何返回值,而直接在shell中執行實際上是存在程序的
原因是os.popen()中命令前需要加上sudo
還有一點需要注意,read()後的返回值,一般帶有\n,容易出現型別錯誤,需要split('\n')[0]獲取原始值,如果是數字直接轉型別即可
同時遇到的問題:如果os.popen()作為if中的條件判斷是否存在程序,未加read(),會出現error writing standard output (Broken pipe) 的警告
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------os.system直接呼叫系統命令,返回標準輸出
os.popen()需要呼叫read()才能獲取標準輸出
subprocess.Popen()是建立並返回一個子程序,並在這個程序中執行指定的程式