解决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 bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 Python
python万年历实现代码 含运行结果
May 20 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
python: 自动安装缺失库文件的方法
Oct 22 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
Python多图片合并PDF的方法
Jan 03 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
Python简易版停车管理系统
Aug 12 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 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动态生成静态HTML网页的代码
2010/03/04 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
PHP生成唯一订单号
2015/07/05 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
newxtree.js代码
2007/03/13 Javascript
javascript 数组的方法集合
2008/06/05 Javascript
javascript 常用功能总结
2012/03/18 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
AngularJS语法详解
2015/01/23 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
解决Python一行输出不显示的问题
2018/12/03 Python
python3.6实现学生信息管理系统
2019/02/21 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
军训心得体会
2013/12/31 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
推荐信怎么写
2014/05/09 职场文书
运动会拉拉队口号
2014/06/09 职场文书
国际贸易系求职信
2014/08/09 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
公司会议开幕词
2015/01/29 职场文书
招商银行收入证明
2015/06/17 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle