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

Autres Java Discussion :

[JRuby] tail


Sujet :

Autres Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut [JRuby] tail
    Bonjour, j'aimerais savoir s'il est possible en JRuby de faire l'équivalent d'un :
    tail -f <fichier> | while read line
    do ...
    done

    en shell, c'est à dire lire les nouvelles lignes ajoutées dynamiquement dans un fichier (pour les traiter au fur et à mesure de leur arrivée) ?

    Merci !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 172
    Points : 219
    Points
    219
    Par défaut
    Bonjour,

    C'est inhabituel d'utiliser JRuby pour faire du shell. On utilise plutôt Ruby. Il faut voir les options supportées par JRuby en ligne de commande. Si elles sont les même que Ruby (type ruby -e 'mon code ici'), ça devrait coller.

    Côme

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    Merci pour la réponse.
    En fait je suis développeur Java non habitué au ksh.
    Je commence tout juste à m'intéresser à des langages 'Java compatible' (JRuby, Jython) dans l'objectif de faire plus simplement qqs taches que l'on peut faire habituellement en shell (traitement fichier, ordre système, manip chaines, ...).
    Mais je n'arrive pas à trouver une bonne doc sur les commandes possibles en JRuby. Je trouve qqs exemples sans plus : si qqn a une bonne adresse... merci !

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    Et la question subsidiaire donc : comment faire une lecture bloquante sur un fichier en JRuby, ruby, voire Jython ?
    Merci !

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 172
    Points : 219
    Points
    219
    Par défaut
    Bonjour,

    Je n'ai pas trop utilisé jRuby. Mais si ça fonctionne comme Ruby, tu devrais pouvoir écrire des choses comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat toto.log | ruby -ne 'print if /toto/'
    => Imprime toute les lignes de toto.log qui contiennent la chaine "toto" quelque part. Le "-e" permet d'executer du Ruby en ligne de commande. Le "-n" fait la même chose qu'un "while do end" pour chaque ligne du fichier.

    Pour bloquer l'accès (sous UNIX), la méthode simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    File.open("mon_fichier", "w") do |f|
      f.flock(File::LOCK_EX)
      f.puts "Ecriture dans un fichier verrouillé"
      f.flock(File::LOCK_UN)
    end
    Pb : Si un processus verrouille le fichier quand tu essayes d'obtenir toi même un verrou, ton script va attendre.
    Autre méthode qui gère ce problème (le secret réside dans le FILE::LOCK_NB):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    File.open("mon_fichier", "w") do |f|
      if f.flock(File::LOCK_EX | File::LOCK_NB)
        f.puts "Ecriture dans fichier verrouillé"
        f.flock(File::LOCK_UN)
      else warn "Le verrou n'a pu être obtenu sur le fichier"
      end
    end
    Enfin, troisième méthode si tu utilises souvent ce principe d'ouverture : Réouvrir la classe "File" et y créer ta propre méthode "open_locked" au sein d'un block begin...end

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class File
      def File.open_locked(*args)
        File.open(args) do |f|
          begin
            f.flock(File::LOCK_EX)
            result = yield f
          ensure
            f.flock(File::LOCK_UN)
            return result
          end
        end
      end
    end
    Evite d'écraser la méthode "open" d'origine... Ca pourrait créer des effets de bord ailleurs.

    Côme

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    Merci pour tous ces exemples. Je vais faire qqs tests...après mes vacances ... si on me laisse un peu de temps

Discussions similaires

  1. taile police maximum dans un état
    Par philpaul dans le forum IHM
    Réponses: 2
    Dernier message: 29/08/2006, 08h26
  2. [JavaScript] Taile minimale pour une fenêtre web
    Par efficks dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/12/2005, 14h57
  3. [Delphi 2005 ] Comment récupérer la taile d'un fichier ?
    Par babyface dans le forum Composants VCL
    Réponses: 2
    Dernier message: 23/11/2005, 20h20
  4. Comment faire un tail -f sur les logs binaires mysql-bin ?
    Par mediaforest dans le forum Requêtes
    Réponses: 8
    Dernier message: 24/09/2005, 12h34
  5. [Fichier] Api équivalent du tail -f sous unix
    Par Actarus78 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 09/09/2005, 11h34

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