A-A+

ansible python api 解决中文乱码

2014年11月14日 Python, 自动化运维 暂无评论 阅读 14,506 views 次

运维工具是用python + django +ansible写的,当用ansible调用远程机器上的脚本时,会造成中文显示乱码,原开始以为是系统编码问题,所以把系统编码都设置成了LANG=zh_CN.UTF-8,结果还是乱码,在被调用的脚本中,也添加了这个LANG=zh_CN.UTF-8,还是乱码。其实要解决这个问题,只有在ansible的python api那设置环境变量即可,environment = {'LANG':'zh_CN.UTF-8','LC_CTYPE':'zh_CN.UTF-8'}

我的代码如下:

  1. def ansible_fun(m_name,m_args,ip,r_user,r_pass,r_port,key_path,forks_num=1):
  2.     '''
  3.     这个函数是调用ansible.runner模块,以下是传递进来的参数:
  4.     m_name   : 模块名,默认使用shell模块
  5.     m_args   : 命令参数,如shell命令
  6.     ip       : ip地址
  7.     r_user   : 远程机器用户名
  8.     r_pass   : 远程机器r_user的密码
  9.     r_port   : 远程机器端口
  10.     key_path : 密钥路径
  11.     
  12.     注:如果是使用shell模块,则获取返回信息调用字典中的key:stdout
  13.     '''
  14.     runner = ansible.runner.Runner(
  15.         module_name = m_name,
  16.         module_args = m_args,
  17.         pattern = ip,
  18.         remote_port = r_port,
  19.         remote_user = r_user,
  20.         private_key_file = key_path,
  21.         forks = forks_num,
  22.         environment = {'LANG':'zh_CN.UTF-8','LC_CTYPE':'zh_CN.UTF-8'}  
  23.         )
  24.     result = runner.run()
  25.     try:
  26.         return result['contacted'][ip]
  27.     except:
  28.         return result['dark'][ip]

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: