Salut,
je voudrais comment ajouter des options usage
supposons qu'on execute un script suivant:
mais je veux ajouter des options comme -h ou --helpCode:#./file.pl
ouCode:#./file.pl -h
merci pour votre aideCode:#./file.pl --help
cdt
Version imprimable
Salut,
je voudrais comment ajouter des options usage
supposons qu'on execute un script suivant:
mais je veux ajouter des options comme -h ou --helpCode:#./file.pl
ouCode:#./file.pl -h
merci pour votre aideCode:#./file.pl --help
cdt
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:
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; }
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.Citation:
Envoyé par Arioch
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.Code:
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__
--
Jedaï
Comme toujours, Maître Jedai a réponse à tout
Salut,
avant lancer ce script, j'ai testé la commande suivant:
On doit installer avec quel paquet?Code:
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.
Merci
cdt
Salut,
j'ai aucune idée sous Unix car j'ai pas trouvé nom de paquet de perl
Code:
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:
1
2
3
4 # apt-get install perl-Version Reading Package Lists... Done Building Dependency Tree... Done E: Couldn't find package perl-Version
et voilà ça marcheCode:
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.
merci
cdt
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à)Code:cpan -i version
--
Jedaï
Salut,
Merci d'installer cette commande
et ça fonctionne !! :)Code:cpan -i version
Mais Mon problème est difficile c'est que la commande suivant par exemple:
je veux ajouter 2 options warning -w et critical -c chacun de ces 2 options a 1 ou plusieurs intervals (limitation entre 2 valeurs)Citation:
critical warning normal warning critical
300-330 330-360 360-710 710-740 740-770
merci pour votre aideCode:$./file.pl -w "330,360 710,740" -c "330,360 710,740"
cdt.
salut,
qu'est ça veut dire cette erreur:
et voilà mon code source:Citation:
Use of uninitialized value in numeric le (<=) at path\snmp.pl line 63.
merci cdtCode:
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}}"; }
Ca veut dire 2 choses ;) :Citation:
Envoyé par faddou
- ton script se lance avec l'option -w, ce qui est une trés bonne chose :mrgreen:
- 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.
Salut,
Citation:
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.
merciCode:
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}}"; }
cdt
Ma réponse reste inchangée, l'une des 2 variables est undef à ta ligne 63 :aie:
Avant la ligne 63 justement, rajoute ça pour voir et donne le résultat stp :
Code:
1
2 print '$result->{$o{O}} = ', $result->{$o{O}}, "\n"; print '$o{w} = ', $o{w}, "\n";
Citation:
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:
1
2
3 resultat: $result->{$o{O}} = -494 $o{w} = -500
Salut,
Quelle est la différence entre Getopt::Std et Getopt::Long?Citation:
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.
Peut-on ecrire cette commnade avec use Getopt::Std? sinon comment?
merci de votre aideCitation:
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:
1
2 $./file.pl -w "-330,-360 -710,-740" -c "-300,-330 -740,-770"
cdt
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ï