解决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正则表达式match和search用法实例
Mar 26 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
介绍Python中内置的itertools模块
Apr 29 Python
Python使用Scrapy爬取妹子图
May 28 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
Mar 16 Python
解决DataFrame排序sort的问题
Jun 07 Python
python中的数据结构比较
May 13 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
python实现最小二乘法线性拟合
Jul 19 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
如何使用python切换hosts文件
Apr 29 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
MySQL连接数超过限制的解决方法
2011/07/17 PHP
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python中的进程分支fork和exec详解
2015/04/11 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
python关于倒排列的知识点总结
2020/10/13 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
Python爬虫开发与项目实战
2020/12/16 Python
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
给排水工程师岗位职责
2013/11/21 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
Redis命令处理过程源码解析
2022/02/12 Redis
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js