IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

ouvrir à un fichier en tant que flux


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2003
    Messages : 48
    Par défaut ouvrir à un fichier en tant que flux
    Bonjour,

    J'ai besoin de surveiller des logs en temps réel et repérer des expressions bien précises. Pour cela, je compte utiliser le module re. Cependant comment puis-je faire pour accéder à un fichier sous forme de "flux de données" un peu comme la commande "tail -f fichier.log" sous linux ?

    J'ai bien essayé un 'open' classique mais ça ne fonctionne pas.

    De même, j'aimerais éviter de faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tail -f /var/log/fichier.log | python parser.py
    Une idée ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 696
    Par défaut
    Salut,

    J'ai bien essayé un 'open' classique mais ça ne fonctionne pas.
    Si vous voulez lire ce qui a été ajouté "à la fin" en continu...

    Il faudra bien sûr faire "open"... mais surtout se positionner à la fin et lire les nouvelles lignes. En gros, ca donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def g_tail(f):
         f.seek(0, 2) # goto end
         while True:
             line = f.readline()
             if not line:
                   time.sleep(0.1)
             else:
                  yield line
    Je suppose que vous avez jeté un œil sur Google pour voir ce qui traîne sur le sujet genre tail -f en python...

    Bon courage,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2003
    Messages : 48
    Par défaut
    Merci pour ta réponse wiztricks.

    En fait, j'essayais de trouver une méthode qui m'aurait renvoyé une exception genre EOF.
    Je ne sais pas pourquoi mais le readline qui me retourne '' me paraissait pas super (avis purement subjectif) puisque ça marche très bien comme ça.

    Enfin voilà

    Bonne continuation !

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 696
    Par défaut
    Citation Envoyé par sluke Voir le message
    Je ne sais pas pourquoi mais le readline qui me retourne '' me paraissait pas super (avis purement subjectif) puisque ça marche très bien comme ça.
    çà fait de temps en temps un readline pour rien toutes les 0,1 s.
    le must serait d'avoir un event qui se déclenche lors de l'ajour d'une ligne au fichier - mais çà dépend de l'OS.
    mais rien n'empêche d'optimiser "ensuite".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2003
    Messages : 48
    Par défaut
    Tout à fait wiztricks. J'ai quelques liens au cas où ça interesserait quelqu'un :

    Pour Linux :
    - le module watchdog (http://packages.python.org/watchdog/...simple-example)
    - les modules fcntl et signal

    Pour Windows :
    - les modules win32file, win32event, win32con (http://timgolden.me.uk/python/win32_...r_changes.html)

    Même si c'est plus efficace, ça me semble moins maintenable ...

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Une chose amusante: Tkinter permet l'utilisation de l’interpréteur Tcl (sans graphique).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> from tkinter import Tcl
    >>> tcl = Tcl()
    >>> if 'after' in dir(tcl):
    ...     print("oui")
    ... 
    oui
    Il suffit alors de boucler sur une fonction avec os.stat(file_to_open).st_size > old_pos = fichier.tell().
    Borderline ? Ok...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/06/2008, 10h46
  2. Ouvrir une DialogPage en tant que dialog
    Par snyouf dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 11/04/2008, 14h18
  3. Charger un fichier en tant que ressource
    Par delph1983 dans le forum Entrée/Sortie
    Réponses: 20
    Dernier message: 05/05/2006, 15h39
  4. sauvegarde de fichiers en tant que blob
    Par ha_mido dans le forum Administration
    Réponses: 3
    Dernier message: 21/11/2005, 17h48
  5. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo