最近在测试SLB,通过我们自己的脚本去动态调整SLB后端服务器的访问权重(我们只使用了SLB提供的VIP,并不依赖SLB的心跳检测,我们有自己的心跳检测来监控后端服务器),发现在控制台调用python脚本没有任何问题,可以很好的去调整后端服务器的权重,但是当我们的python脚本被其他服务调用时,发现总是报错:
msg:decode() argument 1 must be string, not None!
最后定位问题发生在:
aliyun/api/base.py中的percent_encode函数:
encodeStr = str(encodeStr)
res = urllib.quote(encodeStr.decode(sys.stdin.encoding).encode('utf8'), '')
因为sys.stdin.encoding打印出来的值为None
在网上搜索了很多方法,如
reload(sys)
sys.setdefaultecoding("utf8")
如:
在python脚本里面设置
os.environ["PYTHONIOENCODING"]="utf-8"
都没有解决问题,后面只能将该函数中的sys.stdin_encoidng替换为utf8,才OK
网上有提到使用pipline的时候回导致这个问题,如:
echo 'import sys;print sys.stdin.encoding' | python
None
因为我们自己的python脚本是在做failover时被其他服务调用的,目前还不清楚是否是管道的问题
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。