解决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的web.py框架下的application.py模块
May 02 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
numpy基础教程之np.linalg
Feb 12 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
python的几种矩阵相乘的公式详解
Jul 10 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
keras实现多GPU或指定GPU的使用介绍
Jun 17 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
基于python的matplotlib制作双Y轴图
Apr 20 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
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
php多进程应用场景实例详解
2019/07/22 PHP
用 JSON 处理缓存
2007/04/27 Javascript
jquery插件开发方法(初学者)
2012/02/03 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
JS验证不重复验证码
2017/02/10 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
详解python中的模块及包导入
2019/08/30 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
酒店人事专员岗位职责
2013/12/19 职场文书
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
党员培训思想汇报
2014/01/07 职场文书
《去年的树》教学反思
2014/04/11 职场文书
小班上学期评语
2014/05/05 职场文书
师范大学生求职信
2014/06/13 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL