时间:2021-05-22
问题背景:利用python获取服务器中supervisor状态信息时发现未能获取到返回值。
python获取执行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()还可获取到命令执行是否成功状态一开始程序使用的是 os.popen() 方法,在交互式python shell或者IDE环境下使用上述方法都可以获取到执行的返回值,但当使用脚本执行时发现返回值为空,然后修改为使用 command.getoutput() 方法,这时获取到返回值为 “sh: supervisorctl: command not found”。
由此可知是执行命令时无法识别 supervisorctl 命令,但系统中是已经安装好supervisor的,于是使用 which supervisorctl 查看supervisorctl路径,以带路径的方式执行指令 “/usr/local/bin/supervisorctl status”,最后成功获取到返回值。
总结:
python使用shell命令操作非系统自带工具时,最好带上工具路径。
补充知识:python 如何判断调用系统命令是否执行成功
首先我们要知道如何调用系统命令:
>>> os.system('ls')anaconda-ks.cfg install.log.syslog 模板 图片 下载 桌面install.log 公共的 视频 文档 音乐0>>>>>> os.system('lss')sh: lss: command not found32512>>>\\第一种,我们可以肉眼识别正确的会返回0,错误的则是非0
\\第二种,使用if判断调用系统命令返回值是否为0,如为0则不输出,不为0则输出 "Without the command"
-------------------错误-------------------
>>> if os.system('lss') !=0:print 'Without the command'... sh: lss: command not foundWithout the command-------------------正确-------------------
>>> if os.system('ls') !=0:print 'Without the command'... anaconda-ks.cfg install.log.syslog 模板 图片 下载 桌面install.log 公共的 视频 文档 音乐>>>以上这篇解决python 执行shell命令无法获取返回值的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
我的应用场景是:使用shell执行python文件,并且通过调用的返回值获取python的标准输出流。shell程序如下:cmd='python'$1''$2'
1.在shell脚本执行python脚本时,需要通过python脚本的返回值来判断后面程序要执行的命令例:有两个py程序hello.py复制代码代码如下:def
应用场景在一些应用中(比如Jenkins),嵌入了shell脚本,系统通过shell脚本的返回值来判断执行结果,如果返回值非0,则发生了执行错误,需要中止执行,
进程状态变量1、$$获取当前shell的进程号(PID)2、$!执行上一个指令的PID3、$?获取执行上一个命令的返回值(0为成功,非零为失败,这个很常
Shell函数返回值,一般有3种方式:return,argv,echo1)return语句shell函数的返回值,可以和其他语言的返回值一样,通过return语