Annonce

Réduire
Aucune annonce.

Script Python Visite fichiers log / recherche occurences mots

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Script Python Visite fichiers log / recherche occurences mots

    Bonsoir,

    Je reviens sur le petit tool de Comax concernant la visite de fichiers log en version PHP.

    J'ai fais le même en un petit peu plus performant, et avec une version HTML (il a fallu que je m'y mette )

    desktop.jpg

    Il indique :
    - Le nombre d'occurences des mots recherchés
    - Les fichiers concernés par ces mots recherchés
    - Les lignes où se trouvent les mots concernés

    Il vous faut :
    - Linux ou Windows (mais pas testé)
    - le module cherrypy (google + cherrypy + python version 2.7)

    Il y a 2 fichiers :
    - 1 fichier pour le server web
    - 1 fichier pour le chercheur de mots

    Le code du 1er fichier : (page_web.py)

    Exécution du code :

    sudo python page_web.py
    sudo ou mode administrateur pour pouvoir lire tous les fichiers log protégés en lecture

    Puis allez dans votre navigateur et entrer l'adresse suivante : http://localhost:8080

    Code:
    import cherrypy, os
    from ajout import Searching
    
    class Affiche_search(object):
        
        def index(self):
            return """
            <html><body>
                <h2>Rechercher des mots dans vos fichiers log</h2>
                <form action="retour" method="POST">
                mots a chercher: <input type="text" name="mot" /></BR>
                <input type="submit" value="Envoyer"/>
                </form>
            </body></html>
            """
        index.exposed = True
        
        def retour(self, mot):
            s = Searching(mot)
            out = """<html>
                    <body>
                    {0}<BR>
                    {1}<BR>
                    {2}<BR>
                    </body>
                </html>""".format(s.affiche_stat(), s.affiche_files(), s.affiche_lines())
            return out
        
        retour.exposed = True
    
    cherrypy.quickstart(Affiche_search())
    Le code du 2ème fichier :(ajout.py)

    Code:
    #!/usr/bin/env python2.7
    # -*- coding:utf8 -*-
    
    import os, fnmatch, sys
    from collections import defaultdict
    
    class Searching(object):
        def __init__(self, mot):
            self.dico = defaultdict(int)
            self.lines, self.files = [], []
            self.mot = mot.split()
            self.liste = self.gen()
            self.search()
    
        def gen(self):
            """Génère la liste des fichiers du type log dans une liste"""
            liste_files = []
            for root, dirs, files in os.walk("/"):
                for file in fnmatch.filter(files, '*.log'):
                    try:
                        liste_files.append(os.path.join(root, file))
                    except: pass
            return liste_files
    
        def affiche_stat(self):
            """Affiche la statistique des mots trouvés"""
            ch = ""
            for i, j in self.dico.items():
                ch += "le mot {0} a ete trouve {1} fois".format(i, j) + "<BR>"
            return ch
    
        def affiche_lines(self):
            """Affiche les lignes où se trouvent les mots recherchés"""
            ch = ""
            for num, ligne in enumerate(self.lines):
                ch += "ligne {0} --> {1}".format(num+1, ' '.join(ligne))+"<BR>"
            return ch
    
        def affiche_files(self):
            """Affiche les fichiers où les mots ont été trouvés"""
            ch = ""
            for file in self.files:
                ch += file + "<BR>"
            return ch
    
        def search(self):
            """Retourne le dictionnaire incluant les mots et les stats"""
            for files in self.liste:
                with open(files, 'r') as f:
                    lines = [line.strip() for line in f.readlines(1024)]
                    if lines:
                        for line in lines:
                            line = line.split()
                            for word in self.mot:
                                self.dico[word] += line.count(word)
                                if word in line:
                                    self.files.append(files)
                                    self.lines.append(line)
            return self.dico
    
        def __str__(self):
            return repr(self.dico)
    Voilà
    Dernière modification par fred, 18 janvier 2012, 19h00.

  • #2
    C'est comaX qui va être tout content
    sigpic

    Cyprium Download Link

    Plus j'étudie plus j'me rends compte que je n'sais rien.

    †|

    Commentaire


    • #3
      Bah principalement c'est pour lui, mais d'autres peuvent se servir

      Commentaire


      • #4
        Super, je teste ça dès que j'en ai l'occasion ! Merci

        Commentaire

        Chargement...
        X