欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

OpenStack某些命令使用grep过滤报错

程序员文章站 2022-12-19 12:50:39
这里写自定义目录标题OpenStack某些命令使用grep过滤报错报错原因解决方案OpenStack某些命令使用grep过滤报错OpenStack后台使用某些命令的时候,比如glance image-list |grep xxx、neutron xxx-list |grep xxx的时候,报错“‘ascii’ codec can’t encode characters in position 2689-2698: ordinal not in range(128)”报错原因Python在安装时,默...

OpenStack某些命令使用grep过滤报错

OpenStack后台使用某些命令的时候,比如glance image-list |grep xxx、neutron xxx-list |grep xxx的时候,报错“‘ascii’ codec can’t encode characters in position 2689-2698: ordinal not in range(128)”
OpenStack某些命令使用grep过滤报错

报错原因

Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0x?? in position 1: ordinal not in range(128),因此python没办法处理非ascii编码,此时需要重新设置python的默认编码,一般设置为utf8的编码格式。

查看系统当前的Python编码,可以按照如下方式:
1、直接输入“python”命令(针对Python2.x),进入Python命令行;
2、在Python命令行,输入以下命令导入sys:

>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>

3、最后输入命令“sys.getdefaultencoding()”即可查询到当前Python环境的默认编码:

>>> sys.getdefaultencoding()
'utf8'

总体步骤示例如下图:
OpenStack某些命令使用grep过滤报错

解决方案

方案一:用函数sys.setdefaultencoding()临时修改编码
1、直接输入“python”进入Python命令行;
2、分别输入“import sys”、“reload(sys)”导入sys;
3、输入“sys.setdefaultencoding(‘utf8’)”设置默认编码为utf8;

[root@node-1 ~]# python
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.getdefaultencoding()
'ascii'
>>> sys.setdefaultencoding('utf8')
>>> sys.getdefaultencoding()
'utf8'
>>> exit()

此时在执行sys.getdefaultencoding()就会发现编码已经被设置为utf8的了,但是在解释器里修改的编码只能保证当次有效,在重启解释器后,会发现,编码又被重置为默认的ascii了。
此时可以按照方案二永久修改python编码为utf8.

方案二:创建sitecustomize.py文件永久修改编码

1、进入python的默认lib库

[root@node-1 ~]# cd /lib/python2.7/site-packages/
[root@node-1 site-packages]# pwd
/lib/python2.7/site-packages
[root@node-1 site-packages]# 

2、创建文件sitecustomize.py

[root@node-1 site-packages]# vim sitecustomize.py

3、在文件sitecustomize.py中添加以下内容

import sys
reload(sys)
sys.setdefaultencoding('utf8')

wq保存退出。
此时再重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同。这是因为系统在python启动的时候,会自行调用sitecustomize.py这个文件,来设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。

再次使用grep命令过滤,即可正常显示结果。

本文地址:https://blog.csdn.net/weixin_38179166/article/details/107407328