簡體   English   中英

如何從特定時間運行Python腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM