我正在尝试使用for循环迭代列表,并通过正则表达式捕获组构建第二个列表。我查看了与re模块相关的文档但由于某种原因,正则表达式总是返回一个结果。正则表达式已经过测试,所以我确信它是有效的。
有什么想法吗?
被修改
#! /usr/bin/python
import re
import subprocess
try:
cmd = "ps aux|grep -i \'zabbi[x]\'"
cmd_stdout = subprocess.check_output(cmd, shell=True).split('\n')
cmd_stdout_lst = []
ps_re = re.compile(r'^(\S+)\s+(\d+)\s+\d+\.\d+\s+\d+\.\d+\s+(\d+)\s+(\d+).+')
for line in cmd_stdout:
match = ps_re.findall(line)
if match:
print match
cmd_stdout_lst.append('\n\t\t{"{#USER}":'+'"' + match[0][0] + ',"{#PID}":'+'"'+match[0][1]+'"}'+',"{#PID}":'+'"'+match [0][2]+'"}'+',"{#PID}":'+'"'+match[0][3]+'"}')
print '{\n\t"data":['+','.join(cmd_stdout_lst)+']\n}'
except:
raise
$ python proc_discovery.py
[('zabbix', '14479', '96784', '680')]
答案 0 :(得分:1)
我认为这有两个问题:
zabbix
只会匹配相同的内容。为什么额外[ ]
?print
之后崩溃。您没有注意到,因为您捕获并忽略了异常。移除try
- except
以获取更有用的错误消息。具体而言,问题2是re.findall()
返回list
个tuple
。外部list
在您的情况下只有一个元素,内部tuple
有四个。当您尝试为第二个print语句构建字符串时,实际上是将整个元组连接到前缀字符串,这会导致异常。使用match[0][0]
代替match[0]
依此类推,以解决此问题。