按日期和时间过滤来自目标计算机的 /var/log/messages 文件数据



我正在使用下面的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

最新更新