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 :

La commande system


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Par défaut La commande system
    Bonjour à tous,

    Voici le code d'une fonction qui est censée lancer une commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $CMD =$_[0] ;
    if(! system("$CMD")){
      print "\t Exec: $CMD \n";
    }else{
      print "\t Cannot exec: $CMD \n";
      return -1 ;
    }
    Mon problème est qu'elle n'affiche rien...
    J'espère que j'ai été assez claire.
    Merci d'avance.

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Rédigé de cette manière, ton code est celui d'une fonction (cf le $_[0]), donc si tu tiens à le récupérer tel quel puis à l'exécuter, tu dois compléter le code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/perl -w
    use strict;
     
    execute('ls');
     
    sub execute {
        my $CMD = $_[0] ;
        if(! system("$CMD")){
              print "\t Exec: $CMD \n";
        }else{
          print "\t Cannot exec: $CMD \n";
          return -1 ;
        }
    }
    Sinon tu peux lire l'argument de la ligne de commande. Mais dis-nous plutôt ce que tu veux faire. Ou était-ce juste pour comprendre ?

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Par défaut
    Re,

    En fait j'avais juste ecrit (dans mon premier post) le code de la fonction sans toute l'entête mais merci quand même. Je vais donc compléter ma requête !

    J'ai en fait 2 fonctions qui font la même chose l'une marche et l'autre non, je n'arrive pas à comprendre pourquoi !

    Voici la première (toujours la même !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub execute {
        my $CMD = $_[0] ;
        if(! system("$CMD")){
              print "\t Exec: $CMD \n";
        }else{
          print "\t Cannot exec: $CMD \n";
          return -1 ;
        }
    }
    Qui n'affiche rien à l'exécution...

    Et voici la deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    sub execute2 {
        my $CMD = $_[0] ;
        unless(open(CS,"$CMD|")){
              &write_log("Erreur: Cannot exec $CMD");
              close CS;
              return 1;
        }
        @CC=<CS>;
        close CS;
        return @CC ;
    }
    Qui fonctionne à merveille !

    J'espère que je me suis mieux fait comprendre...
    Merci encore.

  4. #4
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Le premier fonctionne bien chez moi. Que veux-tu dire par n'affiche rien ? Même pas le message "Exec: ..." ou "Cannot exec" ? Ou est-ce le résultat de la commande shell qui ne s'affiche pas ? (Dis-moi, tu n'utilises pas de redirection de la sortie standart n'est-ce pas ?)

    Ton deuxième bout de code fait plus, il retourne le résultat de l'exécution sous forme de liste. Donc c'est lui qui ne doit rien afficher puisque la sortie de ta commande est redirigé sur le pipe.

    Je te conseille d'utiliser le pragma strict et d'activer les warnings. Cela évite beaucoup de problème. Vraiment.

  5. #5
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Au fait sur quel système es-tu ? (Unix et apparentés ou Windows ?).

    Je viens de prendre une seconde pour tester, cela marche bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    execute ('ls');
    print execute2('ls');
    affichent tous les deux bien le résultat escompté. Mais bien sûr pas execute2('ls') n'affiche pas le résultat de l'exécution de la commande shell (voir ci-dessus).

Discussions similaires

  1. Problème avec l'utilisation de la commande system awk
    Par vbcasimir dans le forum Linux
    Réponses: 3
    Dernier message: 05/10/2004, 16h18
  2. [le retour] commande systeme
    Par ronan99999 dans le forum Windows
    Réponses: 2
    Dernier message: 29/07/2004, 10h11
  3. [langage] Probleme avec commande system et code
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 14/07/2004, 12h01
  4. Prblème avec la commande system
    Par AnneOlga dans le forum C++Builder
    Réponses: 8
    Dernier message: 04/03/2004, 16h05
  5. La commande systeme
    Par sunshine33 dans le forum MFC
    Réponses: 11
    Dernier message: 13/01/2004, 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