解决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验证码识别的方法
Jul 10 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
Python-嵌套列表list的全面解析
Jun 08 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
Python实现的选择排序算法示例
Nov 29 Python
Python API自动化框架总结
Nov 12 Python
浅谈Tensorflow 动态双向RNN的输出问题
Jan 20 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
python中翻译功能translate模块实现方法
Dec 17 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
体育教师自我鉴定
2014/02/12 职场文书
碧霞祠导游词
2015/02/09 职场文书
员工辞职信范文
2015/03/02 职场文书
保研推荐信格式
2015/03/25 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL