首页 > 解决方案 > python中的命令行输出逐行读取,将行中的每个值放入数组并调用

问题描述

我正在尝试捕获命令的输出并将每一行放在一个数组中,这样如果有意义的话,我可以将行中的位置作为常数进行评估。它将输出几乎视为列。

我基本上已经将一个命令输出分配给一个变量并在每一行上拆分它。我可以进行拆分并获得第一个“列”,但我似乎无法超越这一点。

我已将代码分成几部分以显示我看到的输出。我正在运行 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] 总是指“否”列等。我确实设法通过拆分空间来获得第一列我很确定这是巧合:)

标签: pythonarrayssplit

解决方案


如果我理解你的问题,你需要做的就是把你的if陈述放在你的for循环中。然后它将逐行评估输出。因此,您的最后一部分可能如下所示:

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

注意我更改line.split(' ')line.split()默认操作split()是用空格分隔。

[4:]删除您不考虑的行:等'#####...'


推荐阅读