解决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学习之asyncore模块用法实例教程
Sep 29 Python
给Python IDLE加上自动补全和历史功能
Nov 30 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
Python @property及getter setter原理详解
Mar 31 Python
解决Jupyter无法导入已安装的 module问题
Apr 17 Python
Python基础之进程详解
May 21 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 02 Python
python接口测试返回数据为字典取值方式
Feb 12 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
?算你??的 PHP 程式大小
2006/12/06 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
php动态变量定义及使用
2015/06/10 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
django queryset相加和筛选教程
2020/05/18 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
项目合作协议书范本
2014/04/16 职场文书
环保建议书500字
2014/05/14 职场文书
入党函调证明材料
2015/06/19 职场文书
Redis过期数据是否会被立马删除
2022/07/23 Redis