解决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统计列表中的重复项出现的次数的方法
Aug 18 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
pyenv命令管理多个Python版本
Mar 26 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
python爬虫超时的处理的实例
Dec 19 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
python实现微信自动回复及批量添加好友功能
Jul 03 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
Python中使用socks5设置全局代理的方法示例
Apr 15 Python
Python学习之时间包使用教程详解
Mar 21 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
PHP CURL使用详解
2019/03/21 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
javascript history对象详解
2017/02/09 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
在Python中使用判断语句和循环的教程
2015/04/25 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
应届生会计求职信
2013/11/11 职场文书
经理助理岗位职责
2014/03/05 职场文书
网络技术专业求职信
2014/05/02 职场文书
学习党章心得体会2016
2016/01/15 职场文书