解决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通过urllib2爬网页上种子下载示例
Feb 24 Python
tornado捕获和处理404错误的方法
Feb 26 Python
Python找出最小的K个数实例代码
Jan 04 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
Python文件操作基础流程解析
Mar 19 Python
python安装和pycharm环境搭建设置方法
May 27 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
Python DES加密实现原理及实例解析
Jul 17 Python
django跳转页面传参的实现
Sep 17 Python
Python中使用ipython的详细教程
Jun 22 Python
python百行代码实现汉服圈图片爬取
Nov 23 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
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
JavaScript 字符编码规则
2009/05/04 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
用Python创建声明性迷你语言的教程
2015/04/13 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
资产评估专业大学生求职信
2013/09/29 职场文书
个人简历自我评价范文
2014/02/04 职场文书
双语教学实施方案
2014/03/23 职场文书
活动总结报告范文
2014/05/04 职场文书
英语专业求职信
2014/07/08 职场文书
同意迁入证明模板
2014/10/26 职场文书
力克胡哲观后感
2015/06/10 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书