开发者社区> 问答> 正文

SLB Python API有一个编码的问题

最近在测试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时被其他服务调用的,目前还不清楚是否是管道的问题

展开
收起
redcatmiss 2016-05-05 15:42:48 5487 0
2 条回答
写回答
取消 提交回答
  • ReSLB Python API有一个编码的问题
    我能说我被这问题折磨一周了么,fabric脚本里面写了一套发布流程,手动执行一切正常,Jenkins调用脚本的时候也是报这个错,上周忙得没顾得上好好看这个问题,今天早上看api的源代码发现这块有问题,刚好搜到这篇帖子。
    2016-06-20 10:58:05
    赞同 展开评论 打赏
  • ReSLB Python API有一个编码的问题
    建议改在该函数中判断 sys.stdin.encoding的值,如果是None,则强制使用utf8
    2016-05-11 10:54:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
CUDA MATH API 立即下载
API PLAYBOOK 立即下载
传统企业的“+互联网”-API服务在京东方的实践 立即下载