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 :

[langage] appel de programmes exterieurs


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut [langage] appel de programmes exterieurs
    bonjour la liste,

    voila, j'ai fait plusieurs petits programme qui s'imbriquent. Par exemple lorsque je demande une identification a un programme je lance un programme par :

    jusque là pas de soucis. Par contre lorsque le programme exterieur motdepasse est terminé, je n'arrive pas à avoir la suite du programme principal.

    j'ai essayé avec ou mais en vain.

    peut-on m'aider ?
    d'avance merci.
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  2. #2
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut
    Cela est bizarre. Il faudrait voir a quoi ressemble ton .pm.

    Car il revient dans le programme principal une fois qu'il a fini l'execution du .pm.

  3. #3
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu as bien mis
    à la fin de ton *.pm ? :

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    en fait ce n'est pas un .pm c'est un programme comme un autre !!!
    qui commence par :
    et la fin se fait comme tout autre programme. Ne suis-je pas dans la bonne voie ?
    si ce n'est toujours pas clair je transmetterai le code complet.
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    En laissant le fork() de côté, tu as 3 méthodes pour appeler un programme externe au tien :

    - soit tu fais un appel system :
    Ici, ton programme principal reste en attente et ne fais plus rien, tant que le programme externe ne lui a pas rendu la main.

    - soit tu fais un exec :
    Ici, ton programme principal s'arrête et laisse la main au prog externe.

    - soit tu veux récupérer dans une variable ce que le prog externe a affiché sur STDOUT (sortie standard) :
    Il faut entourer ton prog externe ici par des anti-quotes (touche 7 du clavier alpha). C'est très utile par exemple si ton prog externe doit retourner un code de retour de fonctionnement, genre 1 si tout a bien marché ou 0 sinon. Dans mon exemple, $retour contient tout ce que ton prog externe a affiché en sortie standard.

    Si ton prog externe ne peut pas être utilisé avec l'une de ces 3 méthodes, je te conseille fortement de le transformer en package, ce que d'ailleurs tout le monde avait supposé vues les réponses ! Tu n'as juste qu'à transformer en fonction(s) tout ce que fais ton programme externe, et il te suffira de le déclarer dans ton prog principale via un use Mon_Programme.

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    OK je vais faire l'essai de suite.

    il est vrai que j'aurai pu transformer ce prog en package, mais comme je debute il faut d'abord que je me familiarise un peu plus avec les packages.
    je vous tiens au courant et merci.
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    je pense ne pas avoir le choix de passer par un package !!!

    avec systeme il ne passe pas les variables d'un programme à l'autre et exec() il n'aime pas !!

    la derniere solution n'est semble-t-il pas la bonne pour mon cas non plus.

    je vais m'armer de courage. rester attentif les messages vont fuser....
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Au contraire ! si ton programme principal doit recevoir des variables ou données de ton prog externe, là c'est tout bon pour transformer ce dernier en package

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Un tout piti exemple :

    Un package contenant une variable qui doit être utilisée dans un prog utilisant ce package :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package PkgToto;
    use vars qw(@ISA @EXPORT);
    use Exporter;
    @ISA = qw(Exporter);
    @EXPORT = qw($Toto);
     
    $Toto = "La tete a";
     
    1;
    Et voici un prog principal utilisant ce package :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use PkgToto;
    print "$Toto";              # correct mais se réfère à $Pkg::Toto
    print "$PkgToto::Toto";    # vrai nom de la variable externe $Toto

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    OK merci cela m'éclair beaucoup mais pourrais-tu rapidement un peu m'eclairer sur
    ????
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    ces lignes ci-dessous, je les mets toujours dans mes packages :

    use vars qw(@ISA @EXPORT); je sais plus pq je le mets, sorry
    use Exporter; contient une méthode toute faite pour l'import de packages dans des programmes
    @ISA = qw(Exporter);
    @EXPORT = qw($Toto); ici, il faut insérer les variables et fonctions qui seront accessibles dans le programme utilisant le package

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    OK d'accord mais de deux choses, l'une :

    1. Pourquoi ne dois-je pas déclarer mes variables avec 2. Pourquoi ne pas démarrer mon .Pl avec ????
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    un peu d'aide encore...

    petit rappel :

    je lance un programme quelconque, celui va lancer un programme de gestion de compte. Celui doit verifier si le user est enregistrer et si son compte n'est pas verrouillé parce qu'il a entré 5 fois un mauvais Mdp. un fois cette verif faite celui doit lancer un programme de connection (demande de mot de passe). le mot de passe est demande 5 fois avant que celui ne bloque le compte (inscription d'un fichier .log).

    je desire proceder de cette façon car dans chaque programme futur que je vais faire je voudrais faire appel au meme proceder (gestion compte + motdepasse).
    A savoir que le mot de passe de chaque appli est different.
    Au préalable j'ai ecris un script qui permet de définir sont mdp pour une appli précise (inscription d'un fichier $user$appli.pwd).

    quelqu'un aurait-il un exemple de structure pour réaliser ce projet ?
    d'avance merci.
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  14. #14
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    clair que ta procédure gestion compte + mots de passe doit être externalisée ---> zouuuu, dans un package tout ça !

    faire une structure de ton taf lorsqu'on a pas le cas concret sous le pif, c'est pas évident mais crois-moi, ça va pas être très compliqué à faire.

    en ce qui me concerne, j'ai pas de structure toute faite à te donner.

    Jedaï ? Alors jeune Jedaï, viens par ici, on a besoin de ta Force !!!

  15. #15
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    voila je viens de faire les packages.

    au premier appel de :
    je recois un erreur syntax error !!!!
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  16. #16
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par martijan
    voila je viens de faire les packages.

    au premier appel de :
    je recois un erreur syntax error !!!!
    Alors, le nom d'un package a comme extension .pm et non .pl

    Ensuite, dans ton programme principal, il faut déclarer l'utilisation de ce package par use package;

    Dans ton cas, c'est use mdp;

  17. #17
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    mais il faut que je mette le .pm dans un répertoire système spéciale ?
    mais , je ne suis pas administrateur !
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

  18. #18
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par martijan
    mais il faut que je mette le .pm dans un répertoire système spéciale ?
    mais , je ne suis pas administrateur !
    Pas obligé, si tu le mets dans le même dossier que ton prog .pl, aucun soucis

  19. #19
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    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 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par martijan
    voila je viens de faire les packages.
    Hum, quand tu dis que tu as fait les packages ... Question : as-tu laissé tes progs .pl tels quels et juste transformés en .pm ???

    Je dis ça, parce qu'en principe, un package sert à 90 % du temps pour y stocker des fonctions, pas vraiment des programmes à part entière.

    En utilisant un package, si le-dit package contient juste des fonctions, ces fonctions deviennent accessibles à tout moment dans le programme principal. Mais si le-dit package contient du code pur (pas de fonctions, que du code), il faut savoir que celui-ci va être exécuté intégralement, dès que le compilo aura topé le use package; dans le programme principal.

    Si c'est ce que tu souhaites, c'est nickel mais sinon, fallait te prévenir. Je me suis fait surprendre une fois, ça m'a calmé

  20. #20
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    tu as raison c'est le cas, ce n'est pas ce que je voulais.

    mais bon. si tu veux on reprendra cette conversation Lundi car je suis en W-end dans 5 minutes.

    en tous cas merci pour ton aide précieuse...
    la curiosite n'est pas un défaut lorsqu'elle sert à évoluer...

    MaJe.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. appel a un programme exterieur un peu particulier
    Par KINENVEU dans le forum Général Python
    Réponses: 6
    Dernier message: 06/04/2009, 03h27
  2. [langage] appel d'un second script
    Par matN59 dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2004, 12h59
  3. Avec quel langage débuter en programmation ?
    Par spectrum1984 dans le forum Débuter
    Réponses: 10
    Dernier message: 28/12/2003, 21h57
  4. [langage] les sous programmes
    Par giverny dans le forum Langage
    Réponses: 6
    Dernier message: 21/07/2003, 19h24
  5. Réponses: 4
    Dernier message: 16/01/2003, 14h42

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