解决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生成器的使用方法
Nov 21 Python
Python使用函数默认值实现函数静态变量的方法
Aug 18 Python
Python中的引用和拷贝浅析
Nov 22 Python
实例说明Python中比较运算符的使用
May 13 Python
Python使用pymysql小技巧
Jun 04 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
django实现类似触发器的功能
Nov 15 Python
python绘制规则网络图形实例
Dec 09 Python
python_mask_array的用法
Feb 18 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
在线增减.htpasswd内的用户
2006/10/09 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
js格式化时间小结
2014/11/03 Javascript
React简单介绍
2017/05/24 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
Python字符遍历的艺术
2008/09/06 Python
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python2.7实现爬虫网页数据
2018/05/25 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
allbeauty美国:英国在线美容店
2019/03/11 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
阳光体育活动方案
2014/02/16 职场文书
授权委托书样本
2014/04/03 职场文书
安全标兵事迹材料
2014/08/17 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
《实心球》教学反思
2016/02/23 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS