2016-04-11 10 views
0

Çalıştığım bir günlük izleme python komut dosyası var. "Bağlantı kesildi" metnine sahip girişler bulunduğunda mesajlar gönderir. Komut dosyası, bir "Günlük dosyasının sonu" iletisine rastlayana kadar günlüğü okur. Mevcut haliyle, mesajları karşılaştıklarında gönderir. Bu optimal değil ve toplanan girişleri göndermeden önce 5 dakika bekletmem gerekiyor. Bunun için en iyi yöntemin ne olduğundan emin değilim. İşte yapmaya çalıştığım şeyin basitleştirilmiş bir versiyonu. Şimdiye kadar, time.sleep ve hiçbir boşuna ayrıntılı bir artımlı sayacı denedim.Python için açık bir dosya döngüsündeki iletileri havuzlamak için önerilen yöntem

# 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

kullanışlı bekçi köpeği bulabilir http://stackoverflow.com/questions/32923451/how-to-run-an-function-when-anything-changes-in-a-dir-with-python-watchdog/32923569 # 32923569 –

cevap

1

Bu sizin için çalışır mı?

  1. Bir değişkendeki geçerli saati kaydedin ve döngüden önce boş bir liste oluşturun.
  2. "Bağlantıyı kes" her bulduğunda, iletiyi listeye ekleyin.
  3. while döngüsündeki her yinelemede, mevcut saati kaydettiğiniz zaman damgasını (1. adımda) karşılaştırırsınız - 5 dakikadan (300 saniye) geçtiyse, listeyi yineleyip tüm iletileri gönderirsiniz. listesi ve

Bu anlamlı mı 1. adımdan itibaren değişkeninde şimdiki zamandan tasarruf

  • Boş? Gerekirse daha detaylı çalışabilirim.

  • +0

    Bu, yaptığım şeye oldukça yakın. – oljones

    0

    Yaptığım şey budur.

    # 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 
    
    İlgili konular