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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容