Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/07/2008, à 12:12

Beneludo

Client FTP en python

Bonjour,

Alors pour commencer, je ne connais absolument rien en programmation, et vu que je n'ai rien trouver sur internet qui me conviens, j'ai donc pris la résolution de créer moi-même un script.

Pourquoi:
Je fais parti d'une association, (touring moto club) et régulièrement suite à nos balades, je met en ligne nos photos, et malheureusement récupérer les photos des adhérents, et un parcours du combattant, la totalité des photos peut faire plusieurs centaines de Mo.

Ce que je souhaites réaliser et un client FTP (avec l'adresse FTP, et le mot de passe préenregistré), ou l'on puisse sélectionner par une interface graphique un dossier complet à uploader, ensuite il faudrait que l'interface graphique permette de mettre le "nom-prénom" de l'utilisateur, mette la date, ainsi qu'un champ "nom de la balade", et une fois tout cela rempli, l'appli python upload toutes les photos dans le dossier (du serveur ftp) du style "nom de la balade - nom d'utilisteur - date" et dans ce dossier (créé automatiquement) il doit y avoir toutes les photos (à la limite même dans le sous dossier "toto" de l'utilisateur, vu qu'il choisirait son dossier "toto" à uploader).

Il faut que pour l'utilisateur, ce soit super simple à utiliser, et pour moi que ce soit le plus simple possible à créer, car je n'y connais rien (mais j'ai la volonté de le faire big_smile)

En ayant lu un peu sur le net, le langage python semblerait le plus facile à maîtriser et permet de faire cela (vrai ?)

Comment vous y prendriez vous pour faire cela ?
Que dois-je installer ?
Auriez-vous sous le coude des tutos sympa ?

Edit: Ha oui j'ai oublié de vous dire, il faudra que ce script puisse tourner sous linux mais aussi sous win XP et win Vista.

merci
@+

Dernière modification par Beneludo (Le 06/07/2008, à 12:23)


-- Ludo --
Ubuntu 11.04 -- Intel i5 3Ghz -- Nvidia GeForce GTS 450 -- Gigabyte H55-UDH3
Linux User
Touring Moto Club

Hors ligne

#2 Le 06/07/2008, à 14:10

ADcomp

Re : Client FTP en python

Yep ,
Juste quelques infos en vrac .. mais normalement avec tout ca , pas de soucis  lol

http://www.siteduzero.com/tuto-3-24428-1-utiliser-la-librairie-ftp-de-python.html
http://python.org/doc/current/lib/module-ftplib.html

Doc / Faq / Tuto / ..  sur python :
http://python.developpez.com/faq/
http://python.developpez.com/cours/TutoSwinnen/
http://wikipython.flibuste.net/

Pour win..s , j'utilise un chouette truc : Portable Python
http://www.portablepython.com/
Embarque Tkinter ( GUI ) et Scite ( Editeur ) .. et c'est installé sur ma clé usb cool

Voilà , bonne continuation

Mes 2 cents ..

Dernière modification par ADcomp (Le 06/07/2008, à 14:11)


David [aka] ADcomp

Hors ligne

#3 Le 06/07/2008, à 14:34

Beneludo

Re : Client FTP en python

ADcomp a écrit :

Yep ,
Juste quelques infos en vrac .. mais normalement avec tout ca , pas de soucis  lol

http://www.siteduzero.com/tuto-3-24428-1-utiliser-la-librairie-ftp-de-python.html
http://python.org/doc/current/lib/module-ftplib.html

Doc / Faq / Tuto / ..  sur python :
http://python.developpez.com/faq/
http://python.developpez.com/cours/TutoSwinnen/
http://wikipython.flibuste.net/

Pour win..s , j'utilise un chouette truc : Portable Python
http://www.portablepython.com/
Embarque Tkinter ( GUI ) et Scite ( Editeur ) .. et c'est installé sur ma clé usb cool

Voilà , bonne continuation

Mes 2 cents ..

Merci pour ces liens, j'avais trouvé sur le site du zéro l'utilisation de la librairie FTP, j'ai aussi un tuto "démarrer avec Python" qui est je pense trés bien, mais mon PB va plutôt se trouver vers la création de l'interface graphique, et là j'ai pas trouvé grand chose.

Si tu as une idée.


-- Ludo --
Ubuntu 11.04 -- Intel i5 3Ghz -- Nvidia GeForce GTS 450 -- Gigabyte H55-UDH3
Linux User
Touring Moto Club

Hors ligne

#4 Le 06/07/2008, à 14:44

ADcomp

Re : Client FTP en python

ben comme je t'ai dit .. sous win, j'utilise 'Portable Python' qui embarque Tkinter ..
http://python.developpez.com/faq/?page=Tkinter

C'est assez simple à coder  et utilisable sous Linux & Win ..


David [aka] ADcomp

Hors ligne

#5 Le 06/07/2008, à 14:46

mansonboy

Re : Client FTP en python

Salut, j'ai trouver ceci mais pas tester : http://sebsauvage.net/python/gui/index_fr.html

Hors ligne

#6 Le 06/07/2008, à 15:00

Beneludo

Re : Client FTP en python

Je pensais trouver un utilitaire graphique pour créer ma fenêtre, visiblement ça va être un peu plus compliquer que ce que je pensais. yikes


-- Ludo --
Ubuntu 11.04 -- Intel i5 3Ghz -- Nvidia GeForce GTS 450 -- Gigabyte H55-UDH3
Linux User
Touring Moto Club

Hors ligne

#7 Le 06/07/2008, à 15:05

ADcomp

Re : Client FTP en python

Oui mais bon .. c'est pas ce que tu as demandé non plus .. tongue

@Edit:
Tu n'aurais pas plus de chance à faire ça en java ..?

Mes 2 cents ...

Dernière modification par ADcomp (Le 06/07/2008, à 15:07)


David [aka] ADcomp

Hors ligne

#8 Le 06/07/2008, à 15:15

Beneludo

Re : Client FTP en python

quels seraient les avantages ?
C'est pas plus compliqué ?


-- Ludo --
Ubuntu 11.04 -- Intel i5 3Ghz -- Nvidia GeForce GTS 450 -- Gigabyte H55-UDH3
Linux User
Touring Moto Club

Hors ligne

#9 Le 06/07/2008, à 15:25

ADcomp

Re : Client FTP en python

Je dirais ni oui ni non ( pour pas me faire trucider par les 2 camps wink )
Mais tu veux du portable Linux/Win , avec un IDE et je suppose que tu connais pas plus le python que la java ..

Donc tu t'install NetBeans ( http://www.netbeans.org/index_fr.html ) , puis tu vas faire un tour dans la doc ..

http://www.netbeans.org/kb/index.html
http://java.developpez.com/faq/netbeans/
http://netbeans.developpez.com/

@Edit : je dis pas que c'est pas possible avec python , mais j'ai pas sous la main.

Mais c'est mon avis personnel .. big_smile

Dernière modification par ADcomp (Le 06/07/2008, à 15:28)


David [aka] ADcomp

Hors ligne

#10 Le 06/07/2008, à 15:36

Beneludo

Re : Client FTP en python

ok j'ai bien pris note,
Le truc sur python c'est que j'ai déjà parcouru quelques dizaines de pages de "apprendre à programmer avec python"
donc je vais commencer par regarder avec ça si c'est possible, si je peux j'essai d'écrire qqch, et puis aprés je regarderais avec java, pour éventuellement faire qqch de mieux!


-- Ludo --
Ubuntu 11.04 -- Intel i5 3Ghz -- Nvidia GeForce GTS 450 -- Gigabyte H55-UDH3
Linux User
Touring Moto Club

Hors ligne

#11 Le 07/07/2008, à 18:39

ADcomp

Re : Client FTP en python

Hello ,

Vo!la peut-être un début de code pour l'interface .. ( pas de control sur les données !! )

#!/usr/bin/python
# -*- coding: utf-8 -*-

import Tkinter 
import tkFileDialog

class Main(Tkinter.Tk):
    def __init__(self,):
        Tkinter.Tk.__init__(self)
        self._Path= "."
        
        self.labelDirectory		= Tkinter.Label(self)
        self.labelUser			= Tkinter.Label(self, text='Nom d\'utilisateur')
        self.labelEvent			= Tkinter.Label(self, text='Nom de la ballade')
        self.labelDate			= Tkinter.Label(self, text='Date de la ballade')
        
        self.entry_User 		= Tkinter.Entry(self)
        self.entry_Event 		= Tkinter.Entry(self)
        self.entry_Date 		= Tkinter.Entry(self)
        
        self.buttonDirectory	= Tkinter.Button(self,text="Choisir le répertoire")
        self.buttonGO			= Tkinter.Button(self,text="Ok")
        
        self.buttonDirectory.bind('<Button-1>',self.askPath)
        self.buttonGO.bind('<Button-1>',self.Go2FTP)
        
        self.buttonDirectory.pack(fill='x')
        self.labelDirectory.pack(fill='x')

        self.labelUser.pack(fill='x')
        self.entry_User.pack(fill='x')

        self.labelEvent.pack(fill='x')
        self.entry_Event.pack(fill='x')
        
        self.labelDate.pack(fill='x')
        self.entry_Date.pack(fill='x')

        self.buttonGO.pack(fill='x')
        
    def askPath(self,event):
        self._Path = tkFileDialog.askdirectory(parent=self,initialdir=".",title='Choisissez la vidéo')
        self.labelDirectory.__setitem__('text',self._Path)
        print self._Path
    
    def Go2FTP(self,event):
    	# ici on récupère les infos et on lance la partie FTP du prog'
        print 'Dossier :' , self._Path 
        print 'Utilisateur :' , self.entry_User.get()
        print 'Ballage :', self.entry_Event.get()
        print 'Date :', self.entry_Date.get()
        
if __name__=="__main__":
    
    root = Main() 
    root.title('FTP - Ballade Moto')
    root.mainloop()

@EDIT :

Si j'ai le temps , je regarde pour le controle de validité des données + la partie FTP ..

Mes 2 cents .. d'un petit motard de belgique wink

Dernière modification par ADcomp (Le 07/07/2008, à 18:41)


David [aka] ADcomp

Hors ligne

#12 Le 07/07/2008, à 18:41

Beneludo

Re : Client FTP en python

ouah le gars !!!
pas le temps d'apprendre, il développe en temps réel big_smile

Merci je regarde, mais mon niveau n'est pas encore arrivé là smile


-- Ludo --
Ubuntu 11.04 -- Intel i5 3Ghz -- Nvidia GeForce GTS 450 -- Gigabyte H55-UDH3
Linux User
Touring Moto Club

Hors ligne

#13 Le 07/07/2008, à 18:44

Beneludo

Re : Client FTP en python

C'est pile poil ce qu'il me faut !
un truc simple, ou l'erreur est impossible.
concernant le FTP, j'ai trouvé ça sur le net:

 
import ftplib as ftp # on importe la librairie et on la renomme juste pour le script en "ftp"
 
commands = {} # on crée le dictionnaire qui contiendra toutes les commandes & descriptions
 
def connection(value=None):
    if value == None:
        return getattr(connection, 'value', None)
    else:
        connection.value = value
        return value
 
def ftpcommand(nom_court, description): # fonction pour ajouter la fonction au dictionnaire commands
    def decorator(function):
        global commands # on n'oublie pas de mettre le dico commands global, sinon ça va en redéfinir un
        commands[nom_court] = (function, description) # on ajoute au dictionnaire
        return function
    return decorator
 
@ftpcommand("help", "Affiche l'aide des commandes") # ici on appelle le décorateur : il va s'occuper d'ajouter la fonction help avec sa description au dictionnaire commands
def help(): # définition de la commande, juste après @ftpcommand car ON EST OBLIGÉS
    global commands
    keys = commands.keys() # on récupère les clés == fonctions dans notre cas
    keys.sort() # on trie par ordre alphabétique :)
    for i in keys:
        print i+" : "+commands[i][1] # on affiche le nom de la fonction et sa description
 
@ftpcommand("connect", "Se connecte au serveur. Syntaxe: connect <host> <user> <password>")
def connect(host, user, password):
    connection(ftp.FTP(host, user, password))
 
@ftpcommand("ls", "Liste le contenu du répertoire actuel")
def ls():
    print connection().dir() # on affiche le listing du répertoire
 
@ftpcommand("deco", "Se déconnecte du serveur. Syntaxe: deco")
def deco():
        connection().quit() # la déconnexion avec quit()
 
@ftpcommand("envoi", "Envoie un fichier au serveur. Syntaxe: envoi <adresse_fichier>")
def envoi(adresse_fichier):
      fichier = adresse_fichier
      file = open(fichier, 'rb') # on ouvre le fichier en mode "read-binary"
      connection().storbinary('STOR '+fichier, file) # envoi
      file.close() # fermeture du fichier
 
@ftpcommand("rename", "Renomme un fichier. Syntaxe: rename <avant> <apres>")
def rename(avant, apres):
        renommer, renommer_en = avant, apres
        rename = connection().rename(renommer, renommer_en) # on renomme
 
@ftpcommand("efface", "Efface un fichier. Syntaxe : efface <fichier>")
def efface(fichier):
        effacer = fichier
        delete = connection().delete(effacer) # on efface
 
@ftpcommand("creer_rep", "Crée un répertoire (dossier). Syntaxe : creer_rep <nom>")
def creer_rep(nom):
        rep = nom
        repertoire = connection().mkd(rep) # on crée le répertoire
 
@ftpcommand("sup_rep", "Supprimer un répertoire (dossier). Syntaxe : sup_rep <nom>")
def sup_rep(nom):
        supprimer = nom
        delete_dir = connection().rmd(supprimer) # on supprime le répertoire
 
@ftpcommand("cmd", "Envoie une commande au serveur. Syntaxe: cmd <commande>")
def cmd(commande):
        resultat = connection().sendcmd(commande) # on envoi la commande
 
# un petit message à propos de la license du script :)
welcome = '''ftp.py version 1.0, Copyright (C) 2007
 
ftp.py comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
welcome to redistribute it under certain conditions; see the GNU General Public
License for more details: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html'''
 
def main():
    global commands
    print welcome # affichage du message ci-dessus
    def command_to_argv(cmd):
        argv = cmd.split(' ') # on met dans une liste les différents arguments
        argv_size = len(argv) # on compte le nombre de paramètres
        i = 0 # on initialise le compteur
        while i < argv_size:
            if argv[i].endswith('\\') and i + 1 != argv_size: # si c'est un nom de fichier du type : test\ 1.py
                argv[i] = argv[i][:-1] + " " + argv[i + 1] # on ajoute le "1.py" à "test", ce qui fait "test 1.py"
                del argv[i + 1]
                argv_size -= 1
            i += 1 # on incrémente le compteur
        return argv # on retourne les arguments
    while True: # boucle infinie, il va encore falloir utiliser break pour en sortir
        try: cmd = command_to_argv(raw_input('> ')) # si la commande entrée provoque une erreur...
        except EOFError: return 0 # on quitte la boucle
        except KeyboardInterrupt: return 0 # on quitte la boucle
 
        cmdname, args = cmd[0], cmd[1:] # cmdname = fonction appelée, args = arguments
        if not cmdname in commands.keys(): # si la fonction appelée n'existe pas dans le script
            print "Erreur: '%s' commande incorrecte." % cmdname # on affiche un message d'erreur
            continue
        try:
            commands[cmdname][0](*args)
        except TypeError:
            print "Erreur: mauvais nombre d'arguments pour '%s' command." % cmdname
        except AttributeError:
            print "Erreur : vous n'êtes pas connecté !"
    return 0
 
import sys
if __name__ == "__main__": sys.exit(main()) # si le script est utilisé comme une librairie, on n'exécute pas le script

Il me semble même que c'est dans un lien que tu m'as filé.


-- Ludo --
Ubuntu 11.04 -- Intel i5 3Ghz -- Nvidia GeForce GTS 450 -- Gigabyte H55-UDH3
Linux User
Touring Moto Club

Hors ligne

#14 Le 07/07/2008, à 18:48

ADcomp

Re : Client FTP en python

Rem :
* Tk , y'a pas à dire , c'est moche  tongue
* N'oublie pas d'installer 'python-tk' .. sinon marchera pas wink
* Si tu l'utilses avec 'Portable Python' que j'ai cité plus haut , cela devrait fonctionner sous Win directement.


David [aka] ADcomp

Hors ligne

#15 Le 07/07/2008, à 18:51

Beneludo

Re : Client FTP en python

J'avais installé TKinter, sinon pour portable python, je n'ai pas eu le temps de regarder.
Sinon, c'est vrai que c'est moche, mais c'est simple et fonctionnel, et c'est vraiment l'interface que j'espérais.
Merci pour le travail.

Dernière modification par Beneludo (Le 07/07/2008, à 18:51)


-- Ludo --
Ubuntu 11.04 -- Intel i5 3Ghz -- Nvidia GeForce GTS 450 -- Gigabyte H55-UDH3
Linux User
Touring Moto Club

Hors ligne