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

时间:2018-09-24 20:25:55

标签: python linux shell

我正在使用以下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:

任何人都请帮我纠正它

1 个答案:

答案 0 :(得分:0)

由于多个特殊字符处理级别(在一个外壳内运行另一个外壳),您陷入了困境。

您可以避免使用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='redhat\n', stdout=subprocess.PIPE)
out4 = p.stdout