Salt执行复杂python命令

背景

要用Salt Api在目标机群(centos/window)实现很复杂的配置文件处理操作。

本来的想法

awk powershell。结果awk太难,powershell不会...然后有Salt必有Python,有Python就可以执行python -c "print 1"。但是由于
太复杂,要先读取目标机子上的文件,然后分析逻辑,然后在做文件写操作。于是引发了一个问题,python脚本中有许多字符。例如:, TAB 等等。远程执行各种报错,出错原因是字符问题。
比如我要执行以下代码:

temp = []
with open('/etc/test.conf', 'r') as f:
     for line in f.readlines():
         if line.startswith('# TEST '):
              temp.append(line)
with open('/etc/test2.conf', 'w') as f:
      f.writelines(temp)
      f.write('''
Add Some doc...
Add Some doc...
''')

这段代码是无法用python -c "我的命令"去执行得。代码中有''' : .这种字符。

洋洋自得

如何解决上面的问题。比如我们有这么一段代码

print 1
print 2
print '''
     so simple
'''
  • 第一步,我们可以用exec 这个关键词执行一段String文本。例如
>>> exec """print 1"""
1
  • 第二不, 我们可以将某个文本全部转化为数字,这样就可以去除文本中的特殊字符。例如
>>> code  = """
... print 1
... print 2
... print '''
...      so simple
... '''
... """
>>> code_char_list = list(map(ord, code))
>>> code_char_list
[10, 112, 114, 105, 110, 116, 32, 49, 10, 112, 114, 105, 110, 116, 32, 50, 10, 112, 114, 105, 110, 116, 32, 39, 39, 39, 10, 32, 32, 32, 32, 32, 115, 111, 32, 115, 105, 109, 112, 108, 101, 10, 39, 39, 39, 10]
>>> str(bytearray(code_char_list))
"\nprint 1\nprint 2\nprint '''\n     so simple\n'''\n"
>>> exec str(bytearray(code_char_list))
1
2

     so simple

也就是说,我们在利用Salt远程Api执行某个复杂命令是,可以将原有代码转成如上的数组,这样只有[ ] , 0-9这些字符。就不会被shell命令行 特殊字符所困扰了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值