【发布时间】:2017-01-13 18:51:10
【问题描述】:
说,我有一个应用程序日志文件,逐行增加
Jan 13 20:44:25 Think process1: ID1: Request received user=user1
Jan 13 20:44:26 Think process1: ID2: Request received user=user2
Jan 13 20:44:27 Think process2: ID1: user accessed file=file1
Jan 13 20:44:28 Think process1: ID3: Request received user=user3
Jan 13 20:44:29 Think process3: ID1: Request Served token=tok1
Jan 13 20:44:30 Think process2: ID2: user accessed file=file2
Jan 13 20:44:31 Think process3: ID2: Request Served token=tok2
Jan 13 20:44:32 Think process2: ID3: user accessed file=file3
.....
Jan 13 20:59:24 Think process3: ID**N**: user accessed file=file**N**
而我的代码如下
from sh import tail
def received(input_message):
user1 = input_message[2].split('=')
user = user1[1].replace('\n', '')
return(user)
def accessed(input_message):
file1 = input_message[2].split('=')
file = file1[1].replace('\n', '')
return(file)
def served(input_message):
tok1 = input_message[2].split('=')
tok = tok1[1].replace('\n', '')
return(tok)
for line in tail("-f", "/opt/jagan/app.log", _iter=True):
column = line.split(' ')
date = column[0] + ' ' + column[1] + ' ' + column[2]
host = column[3]
process = column[4]
ID = column[5]
message = column[6:]
if "process1" in process:
username = received(message)
print("Username is:" +(username))
if "process2" in process:
filename = accessed(message)
print("filename is:" +(filename))
if "process3" in process:
token = served(message)
print("Token is:" +(token))
在此,ID 对于每个请求都是唯一的。它会经历所有的过程。 因此,当一个请求完成时,我想在处理请求时打印所有必需的数据。
喜欢:
>['user1','file1','tok1']
['user**N**','file**N**','tok**N**']
问题 1. 如何在程序中存储来自for 循环的数据?我不将数据存储在文件或某些数据库中。因为,日志生成量太高,会影响这个程序的性能。
QUESTION 2. 当一个请求完成时,如何用请求的所有数据触发一个动作?我想触发一个动作,当一个请求完成时,请求的所有信息。说我想用可变数据创建变量列表,也不想将数据保存在其他地方。如果程序停止,数据也会丢失(我可以接受)。
【问题讨论】:
-
问题 1. 像变量一样? QUESTION 2. 输出问题 1 中的变量?
-
@JagannathNaidu 您是否尝试运行代码?因为它有一些错误......
-
@OferArial:process1、process2 和 process3,用引号引起来,因为它们是字符串。将reveived 的拼写更正为received。我已经更正了代码。再次检查,它会正常工作
-
@JulienB.:是的,就像在变量中一样。
标签: python python-2.7 python-3.x subprocess