为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小怪兽爱吃肉 2021-05-14 14:16:42
这里有一个收获:我只需要收集特定时间的所有日志,就可以将其作为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 examplefor line in log_lines:    date_string = " ".join(line.split(None, 3)[:-1])    print(date_string)提取日期和时间。
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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


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


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


查看完整回答
反对 回复 2021-05-25
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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


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



查看完整回答
反对 回复 2021-05-25
  • 2 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信