解决python 执行shell命令无法获取返回值的问题
问题背景:利用python获取服务器中supervisor状态信息时发现未能获取到返回值。
python获取执行shell命令后返回值得几种方式:
#1.os模块 ret=os.popen("supervisorctlstatus") ret_data=ret.read() #2.subprocess模块 ret=subprocess.Popen('supervisorctlstatus',shell=True,stdout=subprocess.PIPE) out,err=ret.communicate() #3.commands模块 ret_data=commands.getoutput("supervisorctlstatus") #commands.getstatusoutput()还可获取到命令执行是否成功状态
一开始程序使用的是os.popen()方法,在交互式pythonshell或者IDE环境下使用上述方法都可以获取到执行的返回值,但当使用脚本执行时发现返回值为空,然后修改为使用command.getoutput()方法,这时获取到返回值为“sh:supervisorctl:commandnotfound”。
由此可知是执行命令时无法识别supervisorctl命令,但系统中是已经安装好supervisor的,于是使用whichsupervisorctl查看supervisorctl路径,以带路径的方式执行指令“/usr/local/bin/supervisorctlstatus”,最后成功获取到返回值。
总结:
python使用shell命令操作非系统自带工具时,最好带上工具路径。
补充知识:python如何判断调用系统命令是否执行成功
首先我们要知道如何调用系统命令:
>>>os.system('ls') anaconda-ks.cfginstall.log.syslog模板图片下载桌面 install.log公共的视频文档音乐 0 >>> >>>os.system('lss') sh:lss:commandnotfound 32512 >>>
\\第一种,我们可以肉眼识别正确的会返回0,错误的则是非0
\\第二种,使用if判断调用系统命令返回值是否为0,如为0则不输出,不为0则输出"Withoutthecommand"
-------------------错误-------------------
>>>ifos.system('lss')!=0:print'Withoutthecommand' ... sh:lss:commandnotfound Withoutthecommand
-------------------正确-------------------
>>>ifos.system('ls')!=0:print'Withoutthecommand' ... anaconda-ks.cfginstall.log.syslog模板图片下载桌面 install.log公共的视频文档音乐 >>>
以上这篇解决python执行shell命令无法获取返回值的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。