解决python 执行shell命令无法获取返回值的问题


Posted in Python onDecember 05, 2020

问题背景:利用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 found
32512
>>>

\\第一种,我们可以肉眼识别正确的会返回0,错误的则是非0

\\第二种,使用if判断调用系统命令返回值是否为0,如为0则不输出,不为0则输出 "Without the command"

-------------------错误-------------------

>>> 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     公共的           视频 文档 音乐
>>>

以上这篇解决python 执行shell命令无法获取返回值的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的内存泄漏及gc模块的使用分析
Jul 16 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
Python内建模块struct实例详解
Feb 02 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
python实现自动解数独小程序
Jan 21 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
python os.listdir()乱码解决方案
Jan 31 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 #Python
快速解决pymongo操作mongodb的时区问题
Dec 05 #Python
pymongo insert_many 批量插入的实例
Dec 05 #Python
python 写一个文件分发小程序
Dec 05 #Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 #Python
用python对oracle进行简单性能测试
Dec 05 #Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 #Python
You might like
BBS(php & mysql)完整版(三)
2006/10/09 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
2016/05/17 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python Crypto模块的安装与使用方法
2017/12/21 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
护理职业应聘自荐书
2013/09/29 职场文书
给排水专业应届生求职信
2013/10/12 职场文书
预备党员的自我评价
2014/03/12 职场文书
中学生操行评语
2014/04/24 职场文书
年会主持人开场白台词
2015/05/29 职场文书
太行山上观后感
2015/06/05 职场文书
运动会广播稿300字
2015/08/19 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android