2016-04-11 5 views
0

Ich habe ein Protokoll Überwachung Python-Skript Ich arbeite an. Es sendet Nachrichten, wenn Einträge mit dem Text "getrennt" gefunden werden. Das Skript liest das Protokoll, bis es auf die Meldung "Ende der Protokolldatei" stößt. In seinem aktuellen Zustand sendet es die Nachrichten, wenn sie rüberkommen. Dies ist nicht optimal und ich muss sie etwa 5 Minuten lang zusammenlegen, bevor ich die gesammelten Einträge sende. Ich bin mir nicht sicher, was die beste Methode dafür ist. Hier ist eine vereinfachte Version von dem, was ich versuche zu tun. Bisher habe ich time.sleep und einen aufwendigen inkrementellen Zähler vergeblich versucht.Empfohlene Methode zum Pool Nachrichten in einer offenen Dateischleife für Python

# Open log 
f = open(log, 'r') 

# Start while loop and read line 
while(1): 

    # Check for Disconnected 
    if line.find("disconnected") != -1: 

    ltime = time.time() 
    print ("Disconnected Found in Log at " + ltime) 

    # Check for end of log file 
    if line.find("End of file") != -1: 

    # End script 
    break 
+1

finden Sie vielleicht Watchdog nützlich http://stackoverflow.com/questions/32923451/how-to-run-an-function-when-anything-changes-in-a-dir-with-python-watchdog/32923569 # 32923569 –

Antwort

1

Würde dies für Sie arbeiten?

  1. Aktuelle Uhrzeit in einer Variablen speichern und vor while-Schleife eine leere Liste erstellen.
  2. Jedes Mal, wenn Sie eine "trennen" finden, hängen Sie die Nachricht an die Liste an.
  3. In jeder Iteration in der while-Schleife vergleichen Sie die aktuelle Zeit mit dem gespeicherten Zeitstempel (in Schritt 1) ​​- wenn mehr als 5 Minuten (300 Sekunden) vergangen sind, durchlaufen Sie die Liste und senden alle Nachrichten. in der Variablen aus Schritt 1.

Macht das Sinn

  • Leeren Sie die Liste und die aktuelle Zeit sparen? Ich kann bei Bedarf weiter arbeiten.

  • +0

    Das ist ziemlich nah an dem, was ich getan habe. – oljones

    0

    Dies ist, was ich getan habe.

    # Disconnects that have already been recorded 
    rec_disconnects = [] 
    
    # Disconnects to msg 
    send_disconnects = [] 
    
    # Start while loop 
    while(1): 
    
        # Wait 5 minutes 
        time.sleep(300) 
    
        # If list isn't empty 
        if send_disconnects: 
    
         # Join all the disconnects from the send list 
         msg = '\n'.join(send_disconnects) 
    
         # print the disconnects 
         print (msg) 
    
         # Clear the list 
         send_disconnects = [] 
    
        # Open the log file and read the lines 
        with open(log) as log:  
         for line in log: 
    
          # If disconnect is found log it 
          if line.find("disconnected") != -1: 
    
          ltime = time.time() 
    
          disconnect = ("Disconnected Found in Log at " + ltime) 
    
          # Check if disconnect is already in the list if not add it 
          # to the running list and the msg list  
          if (disconnect not in rec_disconnects): 
            rec_disconnects.append(disconnect) 
            send_disconnects.append(disconnect