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

Modules Perl Discussion :

commande unix FTP exécutée à travers un fichier...


Sujet :

Modules Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut commande unix FTP exécutée à travers un fichier...
    Bonjour à tous,

    Je travaille sur un script perl qui génère dynamiquement un script bash, contenant la commande FTP d'unix... pourquoi dynamiquement ? pour y ajouter au fur et à mesure, les fichiers à transférer...

    le problème est que j'aimerai récupérer le code retour de cette commande

    le script bash généré est de la forme suivante :

    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
    #!/bin/bash
    ftp ADRESSE_MACHINE << !!
    LOGIN
    PASSWORD
    verbose
    lcd REP_DEPART
    cd REP_ARRIVEE
    ascii
    put fichier1
    put fichier2
    put ...
    bye
    STATUS=$?
    if [ $STATUS -ne 0 ]
    then
    exit 1
    fi
    côté PERL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    system ("sh -x ".$file_ftp." 1> ".$ftp_log);
    if ($? != 0){
          die "Pb lors du l'execution du script de transfert !";
    }else{....}
    le problème est que j'ai ajouter ce que je veux derrière le "bye" de ma commande FTP dans le script, ça n'est pas pris en compte....
    - d'où ma 1ere question, le "bye" est-il bloquant pour toute autre commande unix dans un bash ?
    et surtout la question principale : pourquoi je ne récupère pas ce retour ?

    J'avais pensé à lire dans mon log les retours FTP ( avec numéro 220, etc...). Mais dans mon cas, les erreurs n'ont pas de numéros de lignes (genre : erreur dans la commande ftp, etc...).

    Quelqu'un aurait-il une idée ?

  2. #2
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut Net::FTP
    Salut !

    Pourquoi n'utilises-tu pas le librairie CPAN Net::FTP ?
    Pour récupérer les code d'erreurs, ce sera beaucoup plus simple. Et elle fonctionne très très bien.
    Verre vide je te plains, verre plein, je te vide.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    c'est une contrainte du client... le script bash généré permet de garder une trace sur les fifchiers envoyés et sur le commande exécutée

  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
    Tu n'aurais pas oublié de finir ton HERE document tout simplement ?
    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
     
    #!/bin/bash
    ftp ADRESSE_MACHINE << HERE
    LOGIN
    PASSWORD
    verbose
    lcd REP_DEPART
    cd REP_ARRIVEE
    ascii
    put fichier1
    put fichier2
    put ...
    bye
    HERE
    STATUS=$?
    if [ $STATUS -ne 0 ]
    then
    exit 1
    fi
    Je ne connais pas bien bash (juste le minimum vital), mais il m'apparaît étrange qu'il n'y ait pas une marque de terminaison quelconque pour la string à tranmettre à ftp.

    (NB : Il est facile de faire en sorte que Net::FTP renvoie autant d'information que FTP et de rediriger la sortie d'erreur vers un log le temps nécessaire, et ainsi tu auras un bien meilleur contrôle, une plus grande flexibilité, portabilité, lisibilité.... )
    --
    Jedaï

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    j'avais en effet oublié de finir la commande ftp... merci !

    mais même avec, code retour inexploitable...

    En fait, c'est le code retour des "put fichier..." que je voudrais récupérer, car le code retour du ftp est toujours à 0. Ben oui, ma session ftp s'est déroulée correctement.... mais ce sont les instructions dans le ftp qui ont plantées... mais comment le savoir : :

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    MAis au sujet de Net::FTP, je ne connais pas (pauvre de moi !). Faut-il une bibliothèque spéciale à inclure ? Son utilisation est-elle simple ?... je pose la question, juste au cas où.... peut être que j'arriverai à convaincre mon client...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    d'ailleurs, pourrais-je tester l'exécution des "put" en utilisant Net::FTP ?...

  8. #8
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Citation Envoyé par pimousse_on_ice
    MAis au sujet de Net::FTP, je ne connais pas (pauvre de moi !). Faut-il une bibliothèque spéciale à inclure ? Son utilisation est-elle simple ?... je pose la question, juste au cas où.... peut être que j'arriverai à convaincre mon client...
    Il faut installer un module Perl (ou plusieurs suivant les dépendances et ce que tu as d'installé sur ta machine) et inclure ce module dans ton script (use Net::FTP).
    Tu peux récupérer les erreurs de toutes les commandes que tu passes via ce module.
    Très franchement, Net::FTP est la solution la plus simple et la plus efficace d'autant que tu dis ne pas connaitre parfaitement l'environnement unix...
    Et si tu ne peux vraiment pas l'utiliser, tu peux peut être t'en inspirer...
    Verre vide je te plains, verre plein, je te vide.

  9. #9
    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
    Net::FTP fait partie de la distribution standard, donc tu devrais l'avoir à disposition presque partout sans avoir besoin de l'installer.

    Utiliser un module n'est pas difficile du tout...
    Il suffit de mettre "use Net::FTP;" au début du script, et tu peux utiliser la plupart des commandes du module. Consulte donc la documentation de Net::FTP et reviens nous voir si tu as des questions.

    --
    Jedaï

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    ok. Merci !!

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    j'ai lu dans la doc
    put ( LOCAL_FILE [, REMOTE_FILE ] )
    Put a file on the remote server. LOCAL_FILE may be a name or a filehandle. If LOCAL_FILE is a filehandle then REMOTE_FILE must be specified. If REMOTE_FILE is not specified then the file will be stored in the current directory with the same leafname as LOCAL_FILE .

    Returns REMOTE_FILE , or the generated remote filename if REMOTE_FILE is not given.

    NOTE: If for some reason the transfer does not complete and an error is returned then the contents that had been transfered will not be remove automatically.
    s'il y a une erreur, que renvoie la fonction "put(..)" ?

    En fait, quece soit avec Net::FTP ou pas, il faudrait que je puisse récupérer le code retour des "put"... est-ce que c'est possible ? : Je suis en train de me demander si je ne fonce pas dans le mur...
    à votre avis ?

  12. #12
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    METHODS
     
    Unless otherwise stated all methods return either a true or false value, with true meaning that the operation was a success. When a method states that it returns a value, failure will be returned as undef or an empty list.
    Autrement dit, put() retournera "undef" si le transfert échoue. (undef étant faux et les valeurs de retour possible étant vraies, tu pourrais te contenter de vérifier si la valeur de retour est vraie ou fausse, mais tu prends le risque d'avoir un jour à transférer un fichier de nom '0' (chaine de caractères qui est fausse en Perl)...)

    Pour mieux comprendre comment traiter et détecter les erreurs, regarde la doc de Net::Cmd (Net::FTP hérite de Net::Cmd et donc de ses méthodes).

    (au fait : pour consulter la doc, je t'ai donné des URL du site perldoc.perl.org, mais tu peux aussi la consulter à la ligne de commande avec 'perldoc Net::FTP' par exemple)

    --
    Jedaï

Discussions similaires

  1. [PHP 5.0] [FTP] Exécution d'un fichier.php créé avec la fonction copy()
    Par sharphb dans le forum Langage
    Réponses: 6
    Dernier message: 14/04/2009, 17h09
  2. Command unix ou linux (fedora): lancer un fichier .exe
    Par corseb-delete dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 06/04/2007, 11h29
  3. Réponses: 1
    Dernier message: 22/08/2006, 03h38
  4. Réponses: 5
    Dernier message: 20/01/2006, 10h27
  5. [BAT] commande AT pour exécuter fichier .bat
    Par PatLogan dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 04/01/2005, 16h51

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