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

Langage Perl Discussion :

[langage] Parser le deroulement d'une commande


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut [langage] Parser le deroulement d'une commande
    Bonjour à tous,

    Je lance une commande shell et j'aimerais exploiter la sortie (les differentes infos que renvoit cette commande en cours d'exécution!) En fait, la commande renvoit une ligne qui se rafraichit toutes les secondes. J'aimerais parser cette ligne pour y récupérer les infos en "temps reel"
    Seulement, je ne vois pas comment faire..

    Existe-t-il une methode ??

    Quelqu'un pourrait il m'aider ??

    Cordialement,
    Rodrigue

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Salut,

    Comment récupères-tu la sortie de ta commande en shell? Tu la qtockes dans un fichier? Comment ca se passe exactement?

    Si tu passes par un fichier, tu peux peut-être parser le contenu de ce fichier régulièrement, non?

    Matthieu

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    NOn en fait je récupère le contenu dans une variable de style @var.

    Par contre si je récupère dans un fichier , est-ce que je peux le parser meme en étant partagé avec un autre processus??

    Si oui, dans ce cas, comment inscrire dans le fichier l'éran d'exécution de ma commande shell??

    merci pour votre aide !

    Rodrigue

  4. #4
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Prenons par example la commande Linux vmstat. Avec des clés '-n 1' elle génère une ligne par seconde:

    dev:~# vmstat -n 1
    procs memory swap io system cpu
    r b w swpd free buff cache si so bi bo in cs us sy id
    0 0 0 28408 4424 26456 19268 1 1 3 4 105 8 0 0 100
    0 0 0 28408 4424 26456 19268 0 0 0 0 105 14 0 0 100
    ...
    Dirigeons son stdout dans le fichier vmstat.log et lançons-la en background (&):

    dev:~# vmstat -n 1 >vmstat.log &
    Maintenant vmstat.log grandit toujours. On peut le lire ligne-par-ligne avec tail:

    dev:~# tail -f vmstat.log
    0 0 0 28408 4424 26456 19268 1 1 3 4 105 8 0 0 100
    0 0 0 28408 4424 26456 19268 0 0 0 0 105 14 0 0 100
    ...
    Il est le temps de parser ça en temps réel. Il suffit de diriger le stdout de tail vers notre script Perl.

    Par exemple, si c'est la 4-ème colonne qui nous intéresse:

    dev:~# tail -f vmstat.log | perl -n -e'/\d{5}/; print "$&\n"';
    28408
    28408
    28408
    ...
    On peut obtenir le même résultat sans le fichier tampon vmstat.log:

    vmstat -n 1 | perl -n -e'/\d{5}/; print "$&\n"'
    28408
    28408
    28408
    ...

  5. #5
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Y aurait il un equivalent windows ? Perso ca m'interesse bcp !

  6. #6
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Soit notre générateur est le script nommé p.pl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $| = 1; # autoflush
     
    while (1) {
    	print rand, "\n";
    	sleep (1);
    }
    Son stdout est une séquence aléatoire:

    0.549163818359375
    0.161834716796875
    0.505126953125
    ...
    Supprimons les '0.'. La commande

    p.pl | perl -n -e"s{0\.}{}; print $_"
    Nous donne

    549163818359375
    161834716796875
    505126953125
    ...
    Ça marche en temps réél.

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci dmitry !

    je vais l'essayer tout de suite et je vous tiens au courant !

    Rodrigue

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ca marche bien !

    Merci à tous !

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

Discussions similaires

  1. Parser le resultat d'une commande shell
    Par coockie_jr dans le forum C++
    Réponses: 3
    Dernier message: 19/05/2008, 15h47
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. Réponses: 10
    Dernier message: 24/05/2005, 16h00
  4. [langage] Extraire un block dans une variable multiligne
    Par |DUCATI| DesMo dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2003, 14h56
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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