我正在使用以下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:
任何人都请帮我纠正它
答案 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