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 :

récupérer les variables d'un batch dans Perl ?


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut récupérer les variables d'un batch dans Perl ?
    Bon, tout d'abord je suis grand débutant en programmation, quelle qu'elle soit.
    J'ai fait plusieurs types de recherches sur internet, consulté les forums, mais ne trouve pas de similitude dans les réponses à mon cas précis... Ou bien je ne sais pas les mettre en œuvre.

    Merci donc d'éviter les remarques humiliantes style "trouvé en 5 secondes dans google, 1er résultat".

    On m'a donné un script Perl dont les diverses variables sont appelées en arguments lors de l'appel du script.

    J'ai bien compris que le script Perl récupérait les données via un truc du style $ARGV...

    Mon problème : pour simplifier un peu la chose, j'ai fait un fichier batch qui pose des questions pour récupérer les diverses variables, ce qui est plus "user friendly". Après avoir récupéré toutes les variables je balance un appel du script en mettant les arguments ainsi récupérés.
    Ça, ça marche très bien.

    Le truc c'est que cela oblige à avoir 2 fichiers : un .bat et un .pl

    J'ai appris qu'il était possible d'insérer le code Perl directement dans un batch.

    Sauf que du coup je ne fais pas d'appel du script à proprement parler, et je ne sais pas comment récupérer mes variables entrées via le batch dans la partie "Perl".

    Mes recherches m'ont un peu conduit vers les variables d'environnement, mais sans succès.
    Pour que cela soit didactique pour les gens qui pourraient avoir la même question, je pense que l'on peut illustrer cela avec un "hello world"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #on définit la variable
    set variable=hello world
    #on indique que ce qui va suivre est du Perl
    @CD/d"%~dp0"&perl -s "%~nx0" %*&Exit/b&:';
     
    #Le script perl commence ci-dessous
    print 'variable'
    La question est : comment récupère t'on la variable déclarée dans le batch ?
    Par ailleurs si quelqu'un sait comment faire pour éviter que la fenêtre de commande ne se ferme automatiquement... J'ai essayé la commande pause en fin de script, malheureusement elle se trouve dans ce qui est censé être du Perl et est inopérante...

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    J'utilise Perl plutôt sous Unix, mais je ne pense pas que ce soit la bonne approche.

    Deux solutions:
    - Utiliser Perl pour poser les questions à l'utilisateur et récupérer les réponses (Perl est bien plus puissant que les .bat pour faire ce genre de choses).
    - Si tu veux vraiment utiliser un .bat, alors, quand tu as récupéré les réponses, appelle le script Perl depuis le .bat en lui passant simplement une liste de paramètres, en tapant dans le .bat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl monprogramme.pl param1 param2 param3 param4
    Dans le scrip Perl, "param1 param2 param3 param4" seront dans @ARGV[0..3]

    Exemple dans une fenêtre Dos, avec un script uniligne (le script est ici passé à la ligne de commande entre les guillemets) et les paramètres toto et titi::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    perl -e "print qq/$_ \n/ foreach (@ARGV);" toto titi
    toto
    titi
    Le script perl a bien récupéré les deux paramètres passés en argument et les affiche à l'écran.

    Pour éviter la fermeture intempestive de la fenêtre, mets toi en attente d'une réponse de l'utilisateur.

    Mais franchement, je te conseille de tout faire en Perl et de ne pas utiliser un .bat.

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    J'ajoute que si tu veux utiliser des variables d'environnement définies par un .bat, il faut utiliser dans Perl le hachage %ENV. Exemple, avec un autre uniligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set variable=hello world
    perl -e "print $ENV{variable};"
     
    hello world

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour les réponses,

    c'est certain qu'il est plus "logique" de tout faire en perl, même si je n'y connais rien j'imagine que poser les questions et définir les réponses dans des variables ne doit pas être le plus compliqué à faire dans perl.

    La solution du premier message est déjà celle que j'utilise. J'ai recourt au batch car cela épargne aux personnes à qui je redistribue le script (encore plus novices que moi) d'avoir à ouvrir une fenêtre d'invite, de passer dans le bon répertoire, d'entrer l'appel au script et les arguments sous forme barbare.

    Là ils ne se prennent pas la tête, 2x clic sur le batch, la fenêtre s'ouvre toute seule, l'ordinateur nous pose des questions en français que l'on comprend et pas en termes techniques barbares.

    sans doute y a t'il moyen de faire une interface graphique en perl et de lancer ça comme un executable, mais je ne sais pas faire et me prendrait beaucoup trop de temps, j'imagine.

    La deuxième réponse ressemble plus à ce que je recherche, je vais tester cela.

    Merci beaucoup pour le temps passé à me répondre !

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Si tu veux lancer la procédure avec un double clic sur un .bat, pourquoi pas?

    Mais je pense que ton .bat devrait appeler immédiatement ton script perl, et que le script Perl devrait tout faire. La puissance de Perl est incomparable avec celle des .bat.

    Exemple imaginaire de récupération de données saisies par l'utilisateur sous Perl. Je veux imprimer toutes les lignes d'un fichier passé en paramètre qui ont le mot passé en paramètre 2 dans la ligne (équivalent d'un grep unix ou d'un search VMS).

    Le programme test2.pl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    print "Veuillez donner le nom du fichier a verifier; \n";
    my $input1 = <STDIN>;
    chomp $input1; #enleve le retour chariot de ce que l'utilisateur a saisi
    # ici, du code eventuel pour verifier que l'utilisateur a saisi une donnee valide (verifier l'existence du fichier, par ex.)
    print "Veuillez donner la chaine de texte a verifier: \n";
    my $input2 = <STDIN>;
    chomp $input2;
    # ici, du code eventuel pour verifier que l'utilisateur a saisi une donnee valide (verifier que la chaîne n'est pas vide, par ex.)
    print "$input1 $input2 \n";
    # maintenant je peux lire le fichier et imprimer le lignes contenant le motif
    open INFILE, "<$input1" or die "impossible de lire le fichier en entree\n";
    while (<INFILE>) {
         print if /$input2/;
    }
    A l'exécution, je passe le nom du programme comme fichier à vérfier et "chomp" comme texte à retrouver:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ perl  test2.pl
    Veuillez donner le nom du fichier a verifier;
    test2.pl
    Veuillez donner la chaine de texte a verifier:
    chomp
    test2.pl chomp
    chomp $input1; #enleve le retour chariot de ce que l'utilisateur a saisi
    chomp $input2;
    Le programme m'affiche bien (lignes 7 et 8) les deux lignes du programme contenant le mot "chomp".

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    ok, je vois bien l'intérêt de laisser faire le boulot à perl.

    Merci pour l'exemple bien documenté, très utile, je vais m'en inspirer pour faire les modifications sur le script.


Discussions similaires

  1. [2.x] Récupérer les variables d'une méthode dans un layout
    Par guilhemsymf dans le forum Symfony
    Réponses: 4
    Dernier message: 01/03/2012, 10h52
  2. Réponses: 2
    Dernier message: 02/07/2009, 08h33
  3. Réponses: 5
    Dernier message: 28/09/2007, 14h58
  4. Réponses: 4
    Dernier message: 26/07/2006, 14h29
  5. [VB.NET]Récupérer les variables d'un XML dans VB
    Par Yanos dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/07/2006, 08h21

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