我正在使用下面的python脚本按日期和时间过滤目标机器的/var/log/messages文件中的数据。 但是得到语法错误
我正在使用python版本2.7,将无法升级python版本
#!/usr/bin/python
import cgi, cgitb
import os
from subprocess import PIPE, Popen
def cmdline(command):
process = Popen(
args=command,
stdout=PIPE,
shell=True
)
return process.communicate()[0]
out4=cmdline('sshpass -p redhat ssh -o ConnectTimeout=6 -o NumberOfPasswordPrompts=2 -o StrictHostKeyChecking=no -tt ricky@192.168.0.50 "echo redhat | sudo -S zless /var/log/messages* | grep '^Sep 9' | awk ' $3 > "09:30" && $3 < "23:50" ' "')
print(out4)
执行此脚本时低于输出
Connection to 192.168.0.50 closed.
awk: $3 > 09:30 && $3 < 23:50
awk: ^ syntax error
awk: $3 > 09:30 && $3 < 23:50
awk: ^ syntax error
[sudo] password for ricky:
任何人请帮我纠正它
由于多级特殊字符处理,您正在陷入报价地狱,因为您在另一个内部运行的多个外壳。
你可以通过避免使用shell=True
来减少你的厄运,这样它就少了一个可以逃脱的外壳:
p = subprocess.run([
'sshpass', '-p', 'redhat'
'ssh',
'-o', 'ConnectTimeout=6',
'-o', 'NumberOfPasswordPrompts=2',
'-o', 'StrictHostKeyChecking=no',
'-tt', 'ricky@192.168.0.50'
"""sudo -S zless /var/log/messages* | grep '^Sep 9' | awk ' $3 > "09:30" && $3 < "23:50" '"""
], input='redhatn', stdout=subprocess.PIPE)
out4 = p.stdout