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 :

des options usage


Sujet :

Langage Perl

  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut des options usage
    Salut,

    je voudrais comment ajouter des options usage

    supposons qu'on execute un script suivant:

    mais je veux ajouter des options comme -h ou --help

    ou
    merci pour votre aide

    cdt

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 606
    Par défaut
    Bonjour,

    ci-dessous un petit exemple te permettant d'obtenir de l'aide sur le programme (avec option -h) ou connaître juste son n° de version actuelle (avec option -v) :

    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
    use strict;
     
    my $ProgNom = "file.pl";
    my $ProgVer = "1.0.0";
     
    my $usage = <<END_OF_USAGE;
        $ProgNom v$ProgVer
     
        descriptif de ton programme et des options disponibles ici
        sur une ou plusieures lignes
    END_OF_USAGE
     
    # y a-t-il des arguments fournis au programme ?
    # ATTENTION : dans l'exemple, on ne vérifie qu'une seule option
    if ($ARGV[0] eq "-v")
    {
        print "$ProgNom v$ProgVer\n";
        exit;
    }
     
    if ($ARGV[0] eq "-h")
    {
        print $usage;
        exit;
    }

  3. #3
    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
    Citation Envoyé par Arioch
    Une convention en Perl veut que la version soit stockée dans $VERSION, une variable globale. Autant la respecter même si on n'a pas l'intention de diffuser son script. Par ailleurs, il existe un certain nombre de modules pour gérer les arguments de la ligne de commande en Perl, Getopt::Std et Getopt::Long sont tout deux inclus en standard avec Perl, il ne faut donc pas hésiter à les utiliser.

    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
    32
    33
    34
    #!/usr/bin/perl
    use strict; use warnings;
     
    use Getopt::Std;
    use version;
     
    my %o;
    getopts('hv', \%o);
     
    our $VERSION = qv('0.0.1');
     
    phelp() if $o{h};
    pversion() if $o{v};
     
     
    ## subs
     
    sub phelp {
        print <<"USAGE";
    $0 -h -v
    version : $VERSION
     
    -h prints help
    -v prints version
    ...
    USAGE
        exit(0);
    }
     
    sub pversion {
        print "version : $VERSION\n";
    }
     
    __END__
    En particulier si tu décides de faire une application sérieuse, Getopt::Long te permet de générer automatiquement les informations de version et d'usage à partir du POD contenu dans ton script, tu t'assures ainsi une présentation agréable à peu de prix et une documentation toujours synchronisé avec les informations d'usage que donne la ligne de commande.

    --
    Jedaï

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 606
    Par défaut
    Comme toujours, Maître Jedai a réponse à tout

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Salut,

    avant lancer ce script, j'ai testé la commande suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #perl -e 'use version' 
    Can't locate version.pm in @INC (@INC
    contains: /usr/lib/perl5/5.8.7/i586-linux-thread-multi /usr/lib/perl5/5.8.7 /usr/lib/perl5/site_perl/5.8.7/i586-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.7/i586-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl .) at -e line 1.
    BEGIN failed--compilation aborted at -e line 1.
    On doit installer avec quel paquet?

    Merci
    cdt

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Salut,

    j'ai aucune idée sous Unix car j'ai pas trouvé nom de paquet de perl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # apt-get install perl-version
    Reading Package Lists... Done
    Building Dependency Tree... Done
    E: Couldn't find package perl-version
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # apt-get install perl-Version
    Reading Package Lists... Done
    Building Dependency Tree... Done
    E: Couldn't find package perl-Version
    Sous Windows, j'ai testé avec la commande :
    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
    ppm search version
    ppm install version
    ====================
    Install 'version' version 0.7201 in ActivePerl 5.8.8.817.
    ====================
    Installing C:\Perl\site\lib\auto\version\vxs\vxs.bs
    Installing C:\Perl\site\lib\auto\version\vxs\vxs.dll
    Installing C:\Perl\site\lib\auto\version\vxs\vxs.exp
    Installing C:\Perl\site\lib\auto\version\vxs\vxs.lib
    Installing C:\Perl\html\site\lib\version.html
    Files found in blib\arch: installing files in blib\lib into architecture dependent library tree
    Installing C:\Perl\site\lib\version.pm
    Installing C:\Perl\site\lib\version.pod
    Installing C:\Perl\site\lib\version\vxs.pm
    Successfully installed version version 0.7201 in ActivePerl 5.8.8.817.
    et voilà ça marche

    merci

    cdt

  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
    A vrai dire "version" n'est pas vraiment indispensable, mais ce module permet d'utiliser le schéma unifié d'objet "version" qui sera intégré dans Perl 5.10 et est utilisé par de plus en plus de module du CPAN. Je considère que c'est d'ors et déjà une bonne idée de commencer à l'utiliser.

    Pour ce qui est de l'installer sous Unix, le module CPAN devrait fonctionner sans trop de problème :
    (version n'est absolument pas indispensable à mon code, si tu retires le "use version;" et que tu mets "0.0.1" à la place de qv("0.0.1"), ça fonctionnera aussi bien, c'est juste par habitude que je l'ai mis là)

    --
    Jedaï

  8. #8
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Salut,

    Merci d'installer cette commande
    et ça fonctionne !!

    Mais Mon problème est difficile c'est que la commande suivant par exemple:
    critical warning normal warning critical
    300-330 330-360 360-710 710-740 740-770
    je veux ajouter 2 options warning -w et critical -c chacun de ces 2 options a 1 ou plusieurs intervals (limitation entre 2 valeurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $./file.pl -w "330,360 710,740" -c "330,360 710,740"
    merci pour votre aide
    cdt.

  9. #9
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    salut,

    qu'est ça veut dire cette erreur:

    Use of uninitialized value in numeric le (<=) at path\snmp.pl line 63.
    et voilà mon code source:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       printf("sysUpTime for host '%s' is %s\n",
          $session->hostname, $result->{$o{O}}
       );
     
       if ( $result->{$o{O}} <= $o{w} )
          {
          print "WARNING: $result->{$o{O}}";
          }
       elsif ( $result->{$o{O}} <= $o{c} )
          {
          print "CRITICAL: $result->{$o{O}}";
          }
    merci cdt

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 606
    Par défaut
    Citation Envoyé par faddou
    salut,

    qu'est ça veut dire cette erreur:
    Ca veut dire 2 choses :

    - ton script se lance avec l'option -w, ce qui est une trés bonne chose
    - qu'à la ligne 63 de ton script, le programme essaie de comparer si une valeur est inférieure ou égale à une seconde valeur mais que la comparaison ne peut renvoyer "vrai" parce qu'une des deux valeurs ne contient rien (undef).

    J'ignore quelle est la ligne 63 dans l'extrait de script que tu nous donnes mais il me semble qu'entre les variables $result->{$o{O}}, $o{w} et $o{c}, l'une d'elles ne contient absolument rien.

  11. #11
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Salut,

    J'ignore quelle est la ligne 63 dans l'extrait de script que tu nous donnes mais il me semble qu'entre les variables $result->{$o{O}}, $o{w} et $o{c}, l'une d'elles ne contient absolument rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ligne63=>   if ( $result->{$o{O}} <= $o{w} )
          {
          print "WARNING: $result->{$o{O}}";
          }
       elsif ( $result->{$o{O}} <= $o{c} )
          {
          print "CRITICAL: $result->{$o{O}}";
          }
    merci

    cdt

  12. #12
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 606
    Par défaut
    Ma réponse reste inchangée, l'une des 2 variables est undef à ta ligne 63

    Avant la ligne 63 justement, rajoute ça pour voir et donne le résultat stp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print '$result->{$o{O}} = ', $result->{$o{O}}, "\n";
    print '$o{w} = ', $o{w}, "\n";

  13. #13
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Ma réponse reste inchangée, l'une des 2 variables est undef à ta ligne 63

    Avant la ligne 63 justement, rajoute ça pour voir et donne le résultat stp :


    Code :
    print '$result->{$o{O}} = ', $result->{$o{O}}, "\n";
    print '$o{w} = ', $o{w}, "\n";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    resultat:
    $result->{$o{O}} = -494
    $o{w} = -500

  14. #14
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Salut,

    Jedai a écrit:
    En particulier si tu décides de faire une application sérieuse, Getopt::Long te permet de générer automatiquement les informations de version et d'usage à partir du POD contenu dans ton script, tu t'assures ainsi une présentation agréable à peu de prix et une documentation toujours synchronisé avec les informations d'usage que donne la ligne de commande.
    Quelle est la différence entre Getopt::Std et Getopt::Long?

    Peut-on ecrire cette commnade avec use Getopt::Std? sinon comment?
    je veux ajouter 2 options warning -w et critical -c chacun de ces 2 options a 1 ou plusieurs intervals (limitation entre 2 valeurs)
    par exemple j'ai 2 intervals de warning [-330,-360] et [-710,-740]
    et 2 intervals de critical [-300,-330] et [-740,-770]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $./file.pl -w "-330,-360 -710,-740" -c "-300,-330 -740,-770"
    merci de votre aide

    cdt

  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
    On peut tout à fait autoriser des paramètres aux arguments avec Getopt::Std, lis la doc. Evidemment, ensuite tu dois coder toi-même le parsing de ces paramètres vu qu'ils sont complexes.

    --
    Jedaï

Discussions similaires

  1. [html/css]coloration des options dans un select
    Par the_edge dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 04/05/2005, 15h19
  2. Stocker des options
    Par koolkris dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 11/02/2005, 16h00
  3. [Preferences] Stockage des options
    Par Yan83 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 03/05/2004, 10h38
  4. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 15h33

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