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 :

pb sur le lancement d'une commande tftp


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut pb sur le lancement d'une commande tftp
    Bonjour,

    Je suis à la recherche d'une solution concernant l'envoi de ma commande dos dont l'analyse du résultat indique si un tftp est ouvert dans mon pc (windows xp):

    $_ = `dir > temp.txt`;
    $_= `tftp -i 127.0.0.1 put temp.txt`;
    print '$_ = '."$_\n";


    Dans ma fenetre dos je récupère ça:

    si serveur tftp ouvert:
    C:\backup>TFTP.pl
    Erreur sur le serveur*: Not allowed to overwrite existing files.
    $_ =

    si pas de serveur tftp ouvert:
    C:\backup>TFTP.pl
    Délai d'attente dépassé
    $_ =

    C:\backup>



    La première ligne passe nickel mais celle du tftp ne fait rien apparaitre dans $_, impossible de récupérer les messages "Erreur sur le serveur : Not allowed to overwrite existing files." ou "Délai d'attente dépassé" qui sont pourtant bien affichés car la commande est bien envoyée!!!

    J'ai également testé avec system ("") et avec IO::pipe, sans succès.


    Me serais-je trompé quelque part ?


  2. #2
    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
    C'est parce que ces messages ne sont pas écrit sur la sortie standard du processus, mais sur sa sortie d'erreur. IPC::Open3 est la bonne façon de récupérer la sortie d'erreur d'un processus, mais ici, pourquoi ne pas plutôt utiliser le module Net::TFTP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    use strict; use warnings;
    use Net::TFTP;
     
    my $tftp = Net::TFTP->new("localhost");
    $tftp->put("fichier");
    if( not $tftp->error ) {
      print "Serveur TFTP actif, transfert effectué\n";
    } else {
      print $tftp->error
    }
    --
    Jedaï

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci!

    Mais avec le module tftp tel qu'indiqué ci dessus cela ne colle pas avec mon appli car je souhaite utiliser un serveur tftp 3CDaemon !

    Je vais essayer avec IPC::Open3 et voir ce que ça donne.

  4. #4
    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
    Citation Envoyé par Stef_M Voir le message
    Mais avec le module tftp tel qu'indiqué ci dessus cela ne colle pas avec mon appli car je souhaite utiliser un serveur tftp 3CDaemon
    Je ne vois pas le rapport ? Quel que soit le serveur, n'importe quel client implémentant le protocole TFTP convient.

    --
    Jedaï

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Finalement, j'ai trouvé la solution:

    use IPC::System::Simple qw(run);
    eval {run("tftp -i 127.0.0.1 put temp.txt");};
    if ($@) {print "Pas de tftp server $@\n";}


    Merci de m'avoir aiguillé sur open3 qui m'a conduit à découvrir IPC::System::Simple


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

Discussions similaires

  1. Lancement d'une commande ou d'un .bat
    Par jbrasselet dans le forum ASP
    Réponses: 1
    Dernier message: 06/09/2007, 16h21
  2. Réponses: 5
    Dernier message: 01/07/2007, 20h25
  3. [DOS] Lancement d'une commande en arrière plan
    Par be_tnt dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 19/06/2007, 15h34
  4. [débutant]lancement d'une commande Unix ou LInux depuis Java
    Par msiramy dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 30/09/2005, 18h10
  5. Lancement d'une commande sur un serveur Unix
    Par lper dans le forum Web & réseau
    Réponses: 2
    Dernier message: 29/07/2004, 13h58

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