解决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之玩转字符串(1)
Sep 14 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
Python3安装Pymongo详细步骤
May 26 Python
django框架自定义用户表操作示例
Aug 07 Python
Python面向对象之类和对象实例详解
Dec 10 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
python DataFrame转dict字典过程详解
Dec 26 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 Python
Django ModelForm组件原理及用法详解
Oct 12 Python
Python 实现定积分与二重定积分的操作
May 26 Python
Django基础CBV装饰器和中间件
Mar 22 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
php5数字型字符串加解密代码
2008/04/24 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
对Python _取log的几种方式小结
2019/07/25 Python
使用Python函数进行模块化的实现
2019/11/15 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
社团活动总结怎么写
2014/06/30 职场文书
i7 6700处理器相当于i5几代
2022/04/19 数码科技
muduo TcpServer模块源码分析
2022/04/26 Redis
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL