解决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读取json文件并将数据插入到mongodb的方法
Mar 23 Python
Python解析json文件相关知识学习
Mar 01 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
《与孩子一起学编程》python自测题
May 27 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
django框架实现模板中获取request 的各种信息示例
Jul 01 Python
django框架forms组件用法实例详解
Dec 10 Python
python logging通过json文件配置的步骤
Apr 27 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
python RSA加密的示例
Dec 09 Python
Python答题卡识别并给出分数的实现代码
Jun 22 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
Jquery中对数组的操作代码
2011/08/12 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
url参数中有+、空格、=、%、&、#等特殊符号的问题解决
2013/05/15 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
python中的随机函数小结
2018/01/27 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
java字符串格式化输出实例讲解
2021/01/06 Python
人力资源专员自我评价怎么写
2013/09/19 职场文书
超市业务员岗位职责
2013/12/05 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
政治学求职信
2014/06/03 职场文书
阿凡达观后感
2015/06/10 职场文书
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS