Вывод командной строки в python читает строку за строкой, каждое значение в строке помещается в массив и вызывается - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь захватить выходные данные команды и получить каждую строку в массиве, чтобы я мог оценить положение в строке как константу, если это имеет смысл.Он будет обрабатывать вывод почти как столбцы.

Я в основном назначил вывод команды переменной и разделил ее на каждую строку.Я могу сделать раскол и получить первую «колонку», но, похоже, не могу пройти через это.

Я разбил код на разделы, чтобы показать вывод, который я вижу.Я запускаю aureport для оценки некоторых действий при входе в систему.

#!/usr/bin/python

import os
import platform
import fnmatch
import subprocess

results = subprocess.check_output("aureport -ts yesterday -te now  -au -i --failed", shell=True).splitlines()
print(results)


for line in results:
  print(line)

for line in results:
  arg = line.split(' ')
  item1 = arg[0]
  print(item1)
exit(0)

Я получаю следующие результаты:

['', 'Authentication Report', '============================================', '# date time acct host term exe success event', '============================================', '1. 00/00/00 06:49:24 some_user ? host /some/command no some_pid', '2. 00/00/00 06:49:27 some_user ? host /some/command no some_pid', '3. 00/00/00 06:49:29 some_user ? host /some/command no some_pid', '4. 00/00/00 07:10:44 some_user ? host /some/command no some_pid', '5. 00/00/00 07:10:49 some_user ? host /some/command no some_pid', '6. 00/00/00 07:10:53 some_user ? host /some/command no some_pid', '7. 00/00/00 07:11:14 some_user ? host /some/command no some_pid', '8. 00/00/00 07:11:16 some_user ? host /some/command no some_pid', '9. 00/00/00 07:11:25 some_user ? host /some/command no some_pid', '10. 00/00/00 06:19:44 some_user ? host /some/command no some_pid', '11. 00/00/00 06:19:47 some_user ? host /some/command no some_pid', '12. 00/00/00 06:20:59 some_user host command /some/command no some_pid', '13. 00/00/00 06:21:01 some_user ::1 command /some/command no some_pid']

Authentication Report
============================================
# date time acct host term exe success event
============================================
1. 00/00/00 06:49:24 some_user ? host /some/command no some_pid
2. 00/00/00 06:49:27 some_user ? host /some/command no some_pid
3. 00/00/00 06:49:29 some_user ? host /some/command no some_pid
4. 00/00/00 07:10:44 some_user ? host /some/command no some_pid
5. 00/00/00 07:10:49 some_user ? host /some/command no some_pid
6. 00/00/00 07:10:53 some_user ? host /some/command no some_pid
7. 00/00/00 07:11:14 some_user ? host /some/command no some_pid
8. 00/00/00 07:11:16 some_user ? host /some/command no some_pid
9. 00/00/00 07:11:25 some_user ? host /some/command no some_pid
10. 00/00/00 06:19:44 some_user ? host /some/command no some_pid
11. 00/00/00 06:19:47 some_user ? host /some/command no some_pid
12. 00/00/00 06:20:59 some_user host command /some/command no some_pid
13. 00/00/00 06:21:01 some_user ::1 command /some/command no some_pid

Authentication
============================================
#
============================================
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

Я хотел бы создать некоторые оценки (какпример) 'столбец' в выводе, который показывает 'нет' и затем выводит вывод из остальной части строки.Пример: if arg[7] == 'no': print(arg[4])

То, что я не могу обернуть головой, это вычисление результата построчно, поэтому arg [7] всегда ссылается на столбец «нет» и т. Д. Мне удалосьполучить только первый столбец, разделив пробел, но я уверен, что это совпадение:)

1 Ответ

0 голосов
/ 25 сентября 2019

Если я понимаю ваш вопрос, все, что вам нужно сделать, это поместить ваше заявление if в ваш цикл for.Затем он будет оценивать вывод построчно.Итак, ваш последний раздел может выглядеть следующим образом:

for line in results[5:]:
    arg = line.split()
    if arg[7] == 'no':
        print(arg[4])

Примечание. Я изменил line.split(' ') на line.split(), так как действие по умолчанию split() состоит в разделении пробелами.

[4:] удаляет строки, которые вы не рассматривали: '#####...' и т. Д.

...