美文网首页部署运维Python 运维
Salt执行复杂python命令

Salt执行复杂python命令

作者: OhBonsai | 来源:发表于2017-11-28 20:15 被阅读24次

背景

要用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命令行 特殊字符所困扰了

相关文章

  • Salt执行复杂python命令

    背景 要用Salt Api在目标机群(centos/window)实现很复杂的配置文件处理操作。 本来的想法 aw...

  • salt常用命令

    salt 该命令执行salt的执行模块,通常在master端运行,常用命令 salt-run 该命令执行runne...

  • 无标题文章

    1.salt 该命令执行salt的执行模块,通常在master端运行,也是我们最常用到的命令 salt [opti...

  • 171SaltStack 运维通关手册--Salt 操作模块使用

    远程执行命令 该接口直接调用的 Salt 执行模块。 salt 远程执行命令需要三个内容:目标 target功能 ...

  • SaltStack:编写自己的模块代码

    Salt的执行模块函数并没有什么特别之处,它们实际上就是Python函数,但是当它们结合上Salt的远程执行功能就...

  • SaltStack master file_roots 变量与

    一、第一种目录结构方式 1、salt-master 配置 2、目录结构 重要提示:salt 命令的执行跟 file...

  • salt cmdrun 特殊字符的转义

    当用salt来远程执行命令的时候,需要将命令里的特殊字符进行转义处理,不然会导致命令无法正常执行。特别是需要输入密...

  • 使用python3调用 salt-api

    使用python3调用 salt-api 在项目中我们不能使用命令行的模式去调用salt-api,所以我们可以写一...

  • 调用外部命令/可执行文件

    Python中可以执行shell命令的相关模块和函数有: 随着Python版本的更新,过多的模块引起代码的复杂与冗...

  • 【Linux系统管理7】

    Python中执行外部命令 Python可以通过subprocess模块来执行Linux shell命令以及启动子...

网友评论

    本文标题:Salt执行复杂python命令

    本文链接:https://www.haomeiwen.com/subject/oioebxtx.html