解决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的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
python判断数字是否是超级素数幂
Sep 27 Python
python事件驱动event实现详解
Nov 21 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
Python递归函数特点及原理解析
Mar 04 Python
python实现人机五子棋
Mar 25 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
python 爬取B站原视频的实例代码
Sep 09 Python
python collections模块的使用
Oct 16 Python
详解Django的MVT设计模式
Apr 29 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
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
python登陆asp网站页面的实现代码
2015/01/14 Python
详细介绍Python函数中的默认参数
2015/03/30 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
利用python修改json文件的value方法
2018/12/31 Python
Python中extend和append的区别讲解
2019/01/24 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
什么是python的必选参数
2020/06/21 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
c语言常见笔试题总结
2016/09/05 面试题
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
信息技术课后反思
2014/04/27 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
开票员岗位职责
2015/02/12 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书