解決python 執(zhí)行shell命令無(wú)法獲取返回值的問(wèn)題
問(wèn)題背景:利用python獲取服務(wù)器中supervisor狀態(tài)信息時(shí)發(fā)現(xiàn)未能獲取到返回值。
python獲取執(zhí)行shell命令后返回值得幾種方式:
# 1.os模塊 ret = os.popen("supervisorctl status") ret_data = ret.read() # 2.subprocess模塊 ret = subprocess.Popen('supervisorctl status',shell=True,stdout=subprocess.PIPE) out,err = ret.communicate() # 3.commands模塊 ret_data = commands.getoutput("supervisorctl status") # commands.getstatusoutput()還可獲取到命令執(zhí)行是否成功狀態(tài)
一開(kāi)始程序使用的是 os.popen() 方法,在交互式python shell或者IDE環(huán)境下使用上述方法都可以獲取到執(zhí)行的返回值,但當(dāng)使用腳本執(zhí)行時(shí)發(fā)現(xiàn)返回值為空,然后修改為使用 command.getoutput() 方法,這時(shí)獲取到返回值為 “sh: supervisorctl: command not found”。
由此可知是執(zhí)行命令時(shí)無(wú)法識(shí)別 supervisorctl 命令,但系統(tǒng)中是已經(jīng)安裝好supervisor的,于是使用 which supervisorctl 查看supervisorctl路徑,以帶路徑的方式執(zhí)行指令 “/usr/local/bin/supervisorctl status”,最后成功獲取到返回值。
總結(jié):
python使用shell命令操作非系統(tǒng)自帶工具時(shí),最好帶上工具路徑。
補(bǔ)充知識(shí):python 如何判斷調(diào)用系統(tǒng)命令是否執(zhí)行成功
首先我們要知道如何調(diào)用系統(tǒng)命令:
>>> os.system('ls') anaconda-ks.cfg install.log.syslog 模板 圖片 下載 桌面 install.log 公共的 視頻 文檔 音樂(lè) 0 >>> >>> os.system('lss') sh: lss: command not found 32512 >>>
\\第一種,我們可以肉眼識(shí)別正確的會(huì)返回0,錯(cuò)誤的則是非0
\\第二種,使用if判斷調(diào)用系統(tǒng)命令返回值是否為0,如為0則不輸出,不為0則輸出 "Without the command"
-------------------錯(cuò)誤-------------------
>>> if os.system('lss') !=0:print 'Without the command' ... sh: lss: command not found Without the command
-------------------正確-------------------
>>> if os.system('ls') !=0:print 'Without the command' ... anaconda-ks.cfg install.log.syslog 模板 圖片 下載 桌面 install.log 公共的 視頻 文檔 音樂(lè) >>>
以上這篇解決python 執(zhí)行shell命令無(wú)法獲取返回值的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用win32 COM實(shí)現(xiàn)Excel的寫(xiě)入與保存功能示例
這篇文章主要介紹了Python使用win32 COM實(shí)現(xiàn)Excel的寫(xiě)入與保存功能,結(jié)合實(shí)例形式分析了Python調(diào)用win32 COM組件針對(duì)Excel文件的讀寫(xiě)與保存相關(guān)操作技巧,需要的朋友可以參考下2018-05-05python實(shí)現(xiàn)請(qǐng)求數(shù)據(jù)包簽名
這篇文章主要介紹了python實(shí)現(xiàn)請(qǐng)求數(shù)據(jù)包簽名,主要以python怎么快速對(duì)請(qǐng)求體做一次簽名為主題,塑造實(shí)現(xiàn)請(qǐng)求數(shù)據(jù)包簽名過(guò)程,具有一定得參考價(jià)值,需要的小伙伴可以參考一下2022-02-02Python字符串的15個(gè)基本操作(小結(jié))
這篇文章主要介紹了Python字符串的15個(gè)基本操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02