解决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完全新手教程
Feb 08 Python
Python中的列表知识点汇总
Apr 14 Python
Python读写文件方法总结
Jun 09 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
Python的argparse库使用详解
Oct 09 Python
Python中修改字符串的四种方法
Nov 02 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
如何在向量化NumPy数组上进行移动窗口
May 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
用PHP调用数据库的存贮过程
2006/10/09 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php的sso单点登录实现方法
2015/01/08 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
javascript函数式编程程序员的工具集
2015/10/11 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
用python制作游戏外挂
2018/01/04 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
python搜索包的路径的实现方法
2019/07/19 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
村优秀党员事迹材料
2014/01/15 职场文书
求职自荐信的格式
2014/04/07 职场文书
解除合同协议书
2014/04/17 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
四风之害观后感
2015/06/09 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android
Web应用开发TypeScript使用详解
2022/05/25 Javascript