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

Python Discussion :

Script python ftp et crontab


Sujet :

Python

  1. #1
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut Script python ftp et crontab
    bonjour ,

    J'ai un script python pour un transfert ftp de fichier , qui fonctionne en mode console .
    Dans un crontab , la commande ftp ne s'exécute pas .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def go_ftp():
        ftp = ftplib.FTP("**********")
        ftp.login("************")
        ftp.cwd('*************')
        fichier = read_date()
        # print "fic : "+fichier
        file = open(fichier, 'rb') # ici, j'ouvre le fichier 
        ftp.storbinary('STOR '+fichier, file) # j'indique le fichier à envoyer
        ftp.quit()
        file.close()
        print "Transfert fichier ..."
        print "Terminé" 
     
    print(go_ftp())
    Quel lien externe au cron peut ignorer la commande ?


  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    Regarde dans /var/mail/tonNom la cause y est probablement décrite.

    Si le mail n'existe pas, c'est que tu n'as pas de gestionnaire mail installé. Alors installes-en un, Postfix par exemple.

    Tu es sûr de la syntaxe de ton crontab ?

  3. #3
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    ok , dans /var/mail c'est vide

    Ma distrib est light ( raspian ) , sur une carte embarquée raspberry pi

    Le cron passe bien pour écrire dans des fichiers txt

    Traceback (most recent call last):
    file = open(fichier, 'rb') # ici, j'ouvre le fichier ftp.py
    IOError: [Errno 2] No such file or directory: 't27_04.csv'
    Le fichier de data 't27_04.csv' est bien dans le dossier du script ftp_1.py

    Le début de ftp_1.py est :

    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
    #! /usr/bin/python
    # -*- coding: utf-8 -*-
     
    import ftplib 
    import os
    import glob
    import time 
     
    # Préparation cron 
     
    def read_date():  
        tt=time.strftime("%d_%b_%H_%M")
        mois="_"+time.strftime("%m")+".csv"
        jour=time.strftime("%d")
        fic="t"+jour+mois
        return fic
    # print(read_date())
    Avec le chemin jusqu'au fichier :

    ftplib.error_perm: 553 /home/......../t27_04.csv: Permission denied.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fichier = '/home/......../'+ read_date()
    # print "fic : "+fichier
    file = open(fichier, 'rb') # ici, j'ouvre le fichier 
    ftp.storbinary('STOR '+fichier, file) # j'indique le fichier à envoyer
    ftp.quit()

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    C'est très probablement dût au fait que crontab fonctionne uniquement dans son environnement. Commence ton script par un os.chdir(chemin/du/script) et utilise le chemin complet pour le fichier.

    De plus si tu rencontres des problème d'encodage c'est aussi à cause de crontab, il faut rédiger la commande comme ceci:

    export DISPLAY=:0 & LC_CTYPE="fr_FR.utf-8" Lang="fr_FR.utf-8" python tonAppli tesArguments

    Si tu avais eu un gestionnaire mail les print que tu as mis dans ton code auraient été redirigés dans le mail, ce qui est pratique pour savoir ce qui c'est vraiment passé.

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Ooops, je n'avais pas fait attention à ton erreur 553.

    Quand tu es connecté, place toi dans le bon dossier, et donne simplement le nom du fichier à créer.

    Exemple:
    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
    29
    30
    31
    32
    33
     
    DIRPATH = "dossier/ou/uploader" 
    DATAFILE = "fichier/original"
    FILENAME = "nomdufichier" # Pas de chemin
     
    def upload():
        try:
            ftp = FTP('212.85.158.7')
            ftp.login('moi', 'secret')
        except Exception as why:
            logger.debug('login error: {0}'.format(why))
            sys.exit()
     
        logger.info('Change directory to %s' % DIRPATH)
        ftp.cwd(DIRPATH)
     
        logger.info('Remove file %s' % FILENAME)
        try:
            reply = ftp.delete(FILENAME)
            logger.info('Removed: {0}'.format(reply))
        except Exception as why:
            logger.info('removed fail: {0}'.format(why))
     
        logger.info('Read file %s' % DATAFILE)
        with open(DATAFILE, "rb") as objf:
            logger.info('Upload file %s to .../htdocs/releases' % FILENAME)
            try:
                ftp.storbinary('STOR ' + FILENAME, objf)
            except Exception as why:
                logger.warning('upload failed: {0}'.format(why))
            else:
                logger.info('File uploaded, close ftp.')
            ftp.quit()

  6. #6
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    La commande du crontab est :

    python /home/....../fpt_1.py devient python os.chdir(/home/....../fpt_1.py)

    Je fais cet essai

    sh1 : 1 : modprobe : no found
    Quand j'ai installé postfix , j'ai choisi config local
    ( est ce un bon choix vu que je veux un ftp qui va sur un nas 192.x.x.x ? )

    Avec os.chdir(/home/....../) dans le script ftp_1.py :

    var/mail renvoi :

    File "/home/.............../ftp_1.py", line 10
    os.chdir(/home/...................../)
    ^
    SyntaxError: invalid syntax

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Non, non c'est dans ton script ftp que tu dois mettre chdir() la commande de crontab reste la même.

    Pour postfix, je me souviens que j'ai laissé les paramètres proposés par défaut.

  8. #8
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    Impossible de déclencher ce cron ftp !

    Avec la console c'est direct et correct , avec le cron le néant qui ne trouve pas le fichier ..


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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/04/2008, 20h07
  2. Accents Command Line depuis un script Python
    Par nicou50 dans le forum Général Python
    Réponses: 6
    Dernier message: 29/12/2006, 10h41
  3. Interpreter un script python dans un prog python
    Par romeo9423 dans le forum Général Python
    Réponses: 3
    Dernier message: 01/12/2005, 16h16
  4. script ant ftp
    Par Staron dans le forum ANT
    Réponses: 3
    Dernier message: 26/10/2005, 08h52
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h26

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