在使用saltstack的时发现输入的内容带中文或者输出内容带中文就容易出错:
line 7, in <module>
print(i, '\u7b2c{i}\u6761\u65e5\u5fd7'.format(i=i))
UnicodeEncodeError: 'ascii' codec can't encode character '\u7b2c' in position 0: ordinal not in range(128))
类似发生这样的报错,学网上的修改默认字符集也没用
最后在一篇文章中发现了答案
https://www.cnblogs.com/lytwajue/p/7168800.html
原来cmdrun的源码中又默认给改了字符集。。。。
python2.6的就如文章一样
python2.7或python3.6的好像都是如下这样的
源码路径
/usr/lib/python2.7/site-packages/salt/modules/cmdmod.py
/usr/lib/python3.6/site-packages/salt/modules/cmdmod.py
if reset_system_locale is True:
if not salt.utils.platform.is_windows():
# Default to C!
# Salt only knows how to parse English words
# Don't override if the user has passed LC_ALL
#env.setdefault("LC_CTYPE", "C")
#env.setdefault("LC_NUMERIC", "C")
#env.setdefault("LC_TIME", "C")
#env.setdefault("LC_COLLATE", "C")
#env.setdefault("LC_MONETARY", "C")
#env.setdefault("LC_MESSAGES", "C")
#env.setdefault("LC_PAPER", "C")
#env.setdefault("LC_NAME", "C")
#env.setdefault("LC_ADDRESS", "C")
#env.setdefault("LC_TELEPHONE", "C")
#env.setdefault("LC_MEASUREMENT", "C")
#env.setdefault("LC_IDENTIFICATION", "C")
#env.setdefault("LANGUAGE", "C")
pass
else:
# On Windows set the codepage to US English.
if python_shell:
cmd = "chcp 437 > nul & " + cmd
我全给注掉了,再带中文输入或者输出,也不会报编码错误了。误打误撞找到的解决方案,暂时没遇到其他问题。此方案仅供参考,望大牛能多多指正。