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 :

Lancement d un Perl dans un Ksh


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 24
    Par défaut Lancement d un Perl dans un Ksh
    Bonsoir a tous ,

    voila je vous explique, j ai crée un Perl qui me permet de faire du SSH avec le module Net::SSH . Jusqu a la tout va bien , rien de bien compliqué , mon Perl marche tres bien quand je le lance dans mon shell unix ( SunOS 5.8 ) .

    Maintenant quand je veux lancer ce Perl a partir d'un script Kshell , ça se complique un peu : dans mon script KSH je redirige la trace du perl dans un fichier espion , et dans ce fichier espion quelle n est pas ma surprise quand je découvre que toutes mes traces issus du perl sont en double ( toutes sauf la partie lancement de ssh proprement dite ) !!

    Quand j analyse la trace "en double " je vois bien que ça commence a debloquer des que l'appel a Net::ssh::sshopen2 rend la main a mon perl .

    Alors j ai fais quelque test , j ai mis en commentaire le lancement du ssh dans mon perl et la , miracle , plus de traces en double


    Alors je voulai savoir si quelqu un avait une idée du pourquoi parce que je galère un peu la dessus ! Je pense qu il doit y avoir un fork quelque part dans le module NetSSH mais je sais pas comment eviter la remontée en double des traces ..

    Merci de vos réponses !

  2. #2
    Membre expérimenté Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Par défaut
    Attends, y a un truc que je ne comprends pas : en ligne de commande tes sorties sont normales, et dans un script tes sorties sont en double ?

    Non parce qu'il n'y a pas de différence, dans les deux cas c'est ksh qui interprète la commande lui demandant de démarrer le binaire "perl" avec des arguments.

    Est-ce que tu peux mettre le morceau du script shell incriminé ?

    T'as pas fait un truc du genre "script_perl.pl | tee -a fichier_espion >> fichier_espion" par exemple ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 24
    Par défaut
    Vla un bout de code de mon shell

    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
    function lance
    {
     
    eval "$cmd $param" >> $trc 2>&1
     
    }
     
    function etape
    {
     
      #--- Affectation des variables ---#
     
       #-- La commande
       cmd="monperl.pl"
     
       #-- Parametres
       param="-v -iIDT2"
     
        #-- Trace 
       trc="monperl.esp"
     
      #--- Execution de la commande  ---#
     
      #-- Lancement 
       Lance
       code_retour=$?
     
          [...]

    Sinon j ai fait quelque test , en remplacant l appel au module par un bete "system" ça marche déja un peu mieux . Le perl que j ai d installé sur cette machine est assez vieux , je vais tester avec un perl un peu plus neuf

    Ben non apres test le perl un peu plus neuf ça merde aussi .

    En fait des que je fais ( meme en ligne de commande ) :

    monperl.pl >> monperl.esp , ça me fait une trace en double

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 24
    Par défaut
    Bon j ai trouvé il suffisait de rajouter ça en début de mon perl

    $| = 1; # always flush stdout

    Apparament ca nettoie la STDOUT , quand je forkai mon perl je pense qu il reprenait tout ce qu il y avait dans la stdout ( doit y avoir un buffer dans ce descripteur de fichier ) et me l affichai .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/09/2006, 16h28
  2. Comment intégrer du perl dans une page html
    Par maniaco_jazz dans le forum Web
    Réponses: 5
    Dernier message: 05/12/2005, 02h26
  3. script perl dans script perl et retour derreur..
    Par kiza dans le forum Langage
    Réponses: 7
    Dernier message: 02/12/2005, 15h36
  4. Comment lancer un script perl dans un script perl
    Par kiza dans le forum Langage
    Réponses: 3
    Dernier message: 21/10/2005, 21h02
  5. Réponses: 8
    Dernier message: 17/03/2004, 14h40

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