[英]How to run a Python script from a specific time
這里有一個收獲:
我只需要收集特定時間的所有日志,該時間將解析為python文件的字符串參數,格式為'python main.py -t "Aug 6 12:30:45.123"
日志實際上具有時間戳和相應的日志。 例如:
Aug 6 12:30:45.123 abcdefghijklmnopqrstuvwxyz
等等
從此時開始直到腳本執行為止,捕獲日志變得非常困難。
請注意:只能使用標准Python庫。
到目前為止,這是我嘗試過的:
log_lines = ["Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K",
"Aug 7 11:00:00.000 abc xyz lol"] # we'll use a list as an example
for line in log_lines:
date_string = " ".join(line.split(None, 3)[:-1])
print(date_string)
提取日期和時間。
嘗試使用列表理解來過濾列表:
log_lines = ["Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K",
"Aug 7 11:00:00.000 abc xyz lol"]
arg = "Aug 7 11:00:00"
[line for line in log_lines if line.startswith(arg)]
輸出:
['Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K', 'Aug 7 11:00:00.000 abc xyz lol']
看起來您可以輕松地分離時間戳字符串,但是您需要將其轉換為時間對象或類似對象,以便可以比較時間。
這是一個簡單的示例,該示例分析字符串以創建時間對象,然后將其與開始日志時間進行比較:
import time
#example log
log_lines = ["Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K",
"Aug 8 11:00:00.000 abc xyz lol",
"Aug 3 11:00:00.000 def 3.14",
"Dec 4 11:00:00.000 ghi 1.62",
]
# process args (TODO use argparse)
start_time_arg = "Aug 6 12:30:45.123"
log_start = time.strptime(start_time_arg[:15], "%b %d %H:%M:%S")
for log in log_lines:
log_time = time.strptime(log[:15], "%b %d %H:%M:%S")
if log_time > log_start:
print(log)
這將產生:
Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K
Aug 8 11:00:00.000 abc xyz lol
Dec 4 11:00:00.000 ghi 1.62
有關更多信息,請參見time.strptime() 。 假設時間戳記在前15個字符中,我已經對字符串進行了惰性划分,您可能需要使用在隔離時間字符串中所做的其他工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.