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 :

Ecouter la sortie d'un exe


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    Par défaut Ecouter la sortie d'un exe
    Je voudrai savoir si perl peut écouter la sortie d'un exe , je dispose d'un exe qui tourne dans la console windows , et pour avoir un retour des résultats qu'il produit je doit faire
    catppt [commande] >> res.txt
    , ce qui n'est pas très très jolie , je me demande donc si perl ne peut pas directement récupéré la sortie de l'exe

    merci

  2. #2
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 885
    Par défaut
    Salut

    Avec l'appel system, tu peux récupérer la sortie de ton appli. La FAQ en parle.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    Par défaut
    Sa marche pas , voici mon script pour tester


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl -w
     
    $i = system("pdftotext, -f 1 -layout -raw -enc UTF-8 -nopgbrk doc.pdf");
     
    print "$i\n";

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    Par défaut
    A j'oubliais perl me dort l'erreur

    Error : Couldn't open file ','
    256

  5. #5
    Membre confirmé Avatar de oursblanc
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Par défaut
    Ben là, c'est juste que il ne trouve pas le fichier (erreur de chemin ou d'ouverture proprement dite).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    Par défaut
    J'ai trouvé la soluce pour sa il suffisait de faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/perl -w
     
    system("xls2csv -d UTF-8 7.xls");

    par contre si je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/perl -w
     
    my @t = system("xls2csv -d UTF-8 7.xls");
    pour récupérer le text dans @t perl me sort

    Cannot load charset cp866 - file not found
    Connot load target charset cp866
    alors que sans @t tout marche

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    system() renvoie juste le code d'erreur, pour récupérer la sortie d'une commande, soit on l'ouvre avec open( et un pipe ), soit on l'encadre de "backtick" (AltGr + è : `) ou de son équivalent en q* : qx/ /. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @sortie = `ma commande qui va bien !`;
    --
    Jedaï

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    pense a utilise exec.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/usr/bin/perl
    $last_line=exec("command a execute",$var_val);
    echo $last_line."\n";   # donnee le dernier ligne de resultat
    foreach($var_val as $val){
     echo $val."\n";         # affichage ligne par ligne 
    }

  9. #9
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    NON NON, exec() lance la commande et ne revient jamais !! exec() remplace le processus perl par la commande, donc ce qui se trouve après exec() n'est exécuté que si exec() échoue.

    --
    Jedaï

  10. #10
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    Heu Jedai je n'est pas compris ce que tu veut dire par


    system() renvoie juste le code d'erreur, pour récupérer la sortie d'une commande, soit on l'ouvre avec open( et un pipe ), soit on l'encadre de "backtick" (AltGr + è : `) ou de son équivalent en q* : qx/ /. Exemple :
    Code:

    my @sortie = `ma commande qui va bien !`;



    --
    Jedaï

  11. #11
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Qu'est ce que tu n'as pas compris ? Pour récupérer la sortie d'une commande shell, il ne faut pas utiliser system() (qui renvoie le code d'erreur), ni exec() (qui arrête le script Perl), mais bien les backtick, c'est à dire le caractère "`", tout ceux qui ont fait du shell le comprendront sans problème.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @liste_des_fichiers =  `ls -1`;
    Tout simplement.
    (il existe aussi des méthodes pour récupérer des flux d'entrées, de sortie d'erreur, etc...)

    --
    Jedaï

  12. #12
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    Effectivement sa marche , par contre je ne recoie pas les donnée en retour.

    Pour info je suis sous windows

  13. #13
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Si tu reçois les données. Par contre tu reçois les données de la sortie standard, pas celle de la sortie d'erreur par exemple. Ou alors tu as fait une erreur dans ton code, si tu nous le montrais ça serait plus facile de t'aider tu sais... Tu pourrais aussi nous dire ce que tu cherches à faire en réalité.

    --
    Jedaï

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    Par défaut
    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/perl -w
     
    use strict;
    use LWP::Simple;
     
    extract(@ARGV);
     
    sub extract {
     
      foreach my $doc (@_) {
     
       my $result = get($doc);
          imprimer($result);
       my @texte = `catdoc.exe -d UTF-8 temp.doc`;
          unlink "temp.doc";
     
     
          print  "@texte\n";
     
     }
    }
     
     
    sub imprimer
    {
     my $l = shift;
     open FILE, '>temp.doc' or die "temp.doc : $!\n";
     binmode(FILE);
     print FILE "$l";
     close FILE;
    }

  15. #15
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Je suppose que la différence entre "@text" et "@texte" est une erreur de frappe sur le forum ?

    --
    Jedaï

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 74
    Par défaut
    Citation Envoyé par Jedai
    Je suppose que la différence entre "@text" et "@texte" est une erreur de frappe sur le forum ?

    --
    Jedaï
    Voilou c'est corrigé

Discussions similaires

  1. EXE de sortie beaucoup trop lourds
    Par bvsud dans le forum Delphi
    Réponses: 5
    Dernier message: 01/06/2015, 12h54
  2. Réponses: 2
    Dernier message: 16/04/2014, 14h27
  3. Réponses: 1
    Dernier message: 05/03/2011, 15h13
  4. Réponses: 9
    Dernier message: 31/01/2010, 23h27
  5. utiliser un exe et récupérer les variables de sorties
    Par cvqremy dans le forum VBA Access
    Réponses: 9
    Dernier message: 29/10/2007, 16h39

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