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 :

Exécution d'une commande et récupération asynchrone de sa sortie


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Developer
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Exécution d'une commande et récupération asynchrone de sa sortie
    Bonjour,

    Je voudrais, depuis un script, lancer une commande quelconque et récupérer sa sortie de manière asynchrone. Par exemple, je voudrais lancer la commande "dir /S C:\" et récupérer sa sortie au fur et à mesure de l'exécution.

    Le script suivant devrait convenir:

    my $cmd="dir /S C:\";
    open( TMP, "$cmd|");
    foreach(<TMP>) {
    print;
    }

    Malheureusement il semble que le pipe ("|") ne fonctionne pas pleinement et que la sortie se fasse dans un fichier temporaire. En effet, je ne récupère la sortie que lorsque la commande a terminé son exécution.

    Normalement il ne devrait pas y avoir ce problème (excepté sur Windows 95/98)

    Avez-vous une idée de la manière de régler ce problème ?

    Merci, Bruno.

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour,

    et bienvenue sur le forum.

    Tout d'abord, au niveau de la syntaxe:
    Dans ton code, ce serait plutot un while qu'un foreach qu'il faudrait utiliser.
    De plus, ne pas oublier de mettre un espace entre la commande et le pipe
    Enfin, ne pas oublier le close à la fin.

    Ce qui peut bloquer ensuite, c'est la bufferisation : perl utilise des buffers, et il est probable que le résultat d'un dir soit bien inférieur à la taille du buffer utilisé, par conséquent, vu que le buffer n'est pas rempli à 100%, il te faut attendre la fin de la commande, soit la fermeture du buffer, pour qu'un résultat s'affiche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $cmd='dir /S C:\ ';
    open( TMP, "$cmd |");
    while(<TMP>) {
        print;
    }
    close(TMP);
    PS: la prochaine fois, pense à utiliser la balise CODE, c'est plus propre !

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  3. #3
    Membre à l'essai
    Profil pro
    Developer
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Merci
    Ca marche avec l'espace, et j'ai aussi changé le foreach en while.
    (le close était déjà dans mon code).

    Bruno

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/06/2006, 16h41
  2. Exécution d'une commande dans un Trigger
    Par Perr1 dans le forum Oracle
    Réponses: 6
    Dernier message: 08/04/2006, 00h14
  3. [VB]Problème d'exécution d'une commande dos...
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 17/02/2006, 12h28
  4. Réponses: 6
    Dernier message: 09/11/2005, 17h29
  5. [Système] Pb exécution d'une commande externe
    Par licorne dans le forum Langage
    Réponses: 9
    Dernier message: 19/10/2005, 16h34

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