Я использую ниже сценарий 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 [email protected] "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', '[email protected]'
"""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
subprocess.run
был добавлен на python 3.5 @SatwikMukherjee обновите ваш питон