如何从特定时间运行Python脚本

时间:2018-08-13 23:46:00

标签: python

这是一个陷阱:

我只需要收集特定时间的所有日志,该时间将解析为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)

提取日期和时间。

2 个答案:

答案 0 :(得分:0)

尝试使用列表理解来过滤列表:

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']

答案 1 :(得分:0)

看起来您可以轻松地分离时间戳字符串,但是您需要将其转换为time对象或类似对象,以便您可以比较时间。

这是一个简单的示例,该示例分析字符串以创建时间对象,然后将其与开始记录时间进行比较:

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个字符中,我已经对字符串进行了惰性分割,您可能需要使用在隔离时间字符串中所做的其他工作。