python - 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] 总是指“否”列等。我确实设法通过拆分空间来获得第一列我很确定这是巧合:)
解决方案
如果我理解你的问题,你需要做的就是把你的if
陈述放在你的for
循环中。然后它将逐行评估输出。因此,您的最后一部分可能如下所示:
for line in results[5:]:
arg = line.split()
if arg[7] == 'no':
print(arg[4])
注意我更改line.split(' ')
为line.split()
默认操作split()
是用空格分隔。
[4:]
删除您不考虑的行:等'#####...'
。
推荐阅读
- python - 如何将多个数据集合并为一个数据集?
- c# - 为什么 HttpWebRequest 有时会抛出 OperationCanceledException 或 WebException.timeout?
- mongodb - 按多个值排序并制作排行榜 mongodb mongoose discord.js
- r - R计数一列中值的实例,将计数放入新列中
- vue.js - 如何在状态变化时调用突变
- oauth-2.0 - 在 Hyperledger Composer REST 服务器上使用 Google OAUTH2.0 时无法获取用户信息
- python - 您可以在 Python 类型注释中指定方差吗?
- flutter - 类型“SliverAppBar”不是“PreferredSizeWidget”类型的子类型 FLUTTER 问题
- reactjs - 如何在 React Native 中使用 Mobx 解决此错误?
- arrays - 如何从 powershell 脚本中调用函数?