Lire la Documentation Python
Pages: [1] 2 3 ... 74   Bas de page
  Envoyer ce fil  |  Imprimer  
Auteur Fil de discussion: Installeur PassionXbmc - Développement  (Lu 118467 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« le: 04 Août 2008 21:58:16 »

(faites pas attention, c'est juste plus pratique d'écrire ici que par mary poppins)

J'écris ce topic car j'ai trouvé que c'était un bon exercice que d'apprendre le python en essayant de créer un plugin pour installer les skins du stock ftp. Temhil a bien voulu m'aider à corriger mes erreurs et m'orienter pour que je pige la programmation orientée objet. Du coup voici ou j'en suis (j'essaie d'apprendre les fonctions de base, attributs, etc...) :

Et en plus ça me permet d'avoir mes codes pour m'entrainer pendant mes pauses déj' au boulot...

Code
(Python):
import os , ftplib
 
def coord():
adresse = 'stock.passionxbmc.org'
port = "21"
cheminsource = '/.passionxbmc/Themes/Vinci'
chemindestination = '/home/seb/'
monlogin = 'anonymous'
monpassword = 'xxxx'
 
def install_skin(pathsrc,pathdst):
lenpathsrc = len(pathsrc)
def _download(pathsrc):
l = ftp.nlst(pathsrc)
for i in l:
try:
ftp.size(i)
print i
ftp.retrbinary('RETR '+i, open(pathdst+os.sep+i[lenpathsrc:], 'wb').write)
except:
try: os.makedirs(pathdst+os.sep+os.path.dirname(i[lenpathsrc:]))
except: pass
_download(i)
_download(pathsrc)
 
 
 
ftp = ftplib.FTP(coord)
ftp.connect(monadresse, monport)
ftp.login(monlogin, monpassword)
install_skin(cheminsource, chemindestination)

« Dernière édition: 30 Mars 2009 15:29:57 par Shaitan » Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #1 le: 04 Août 2008 21:59:21 »
Haut de page

Voici sa réponse (portant sur un post précédent)

Salut Seb,

Comment vas-tu? Moi ca va. Je suis actuellement entre 2 boulot aussi j'espère avoir un peu de temps pour finaliser mes projets en cours,
Excellente nouvelle que voila, bravo pour te mettre au python.
Je n'ai jamais utilise la lib ftp encore mais voici quelques info (a vue de nez) pour te permettre de continuer. J'y reregarderais a tête reposée et te dirais.
- 1ere chose que je n'ai pas compris(mais comme je dis je suis moi aussi encore jeune en python), c'est ta fonction ftplib.
ftplib est un module python donc tu n 'as pas a le redéfinir.
Apres pour definir tes variable, adresse, port ... tu peux le faire en dehors d'une fonction:

Code
(Python):
import urllib,re,sys
 
#import xbmcplugin,xbmcgui,xbmc
import ftplib as ftp
 
#def connect_ftp()
# ftp.connect(adresse, port)
#def lecture_ftp()
 
#def copyftp()
 
adresse = 'stock.passionxbmc.org'
port = "21"
cheminsource = '/.passionxbmc/Themes/Vinci'
chemindestination = '/home/seb/'
monlogin = 'anonymous'
monpassword = 'xxxx'



Ensuite, tu crees une instance de la classe FTP avec cette ligne
Code
Code
(Python):
ftp = ftplib.FTP('')
 



er probleme est qye tu lui donnes un chaine de caractere vide '', il n'aime pas
autre pobleme choisie un nom de variable (ici ftp) different du nom de la librairie, c'est plus facile a lire et ca evitera les confusion.
J'ai trouve un exemple de code ICI

Et la doc offcielle est : LA
Il te faut donc creer ton instance de FTP avec les parametres domc il a besoin pour s'initialiser:
Code
(Python):
 
myFtp = FTP(adresse ,monlogin , monpassword )

Ou si tu ne veux pas de parametere et passer les varibale plus tard:


Code
(Python):
myFtp = FTP()


mais pas de ''

Ensuite fais attention a mettre tes chemins en dur car comme tu le sais on risque d'avoir des pb entre XBOX (base sur NT) et Linux. Regardes dans Nabbox ou j'utlisais la fonction je crois os.join (un truc du genre) plutot que + et avoir des '/' dans les chemins.

Autre problemes, tes fonctions install_skin et _download, elle ne devrais pas etre imriques l'un dans l'autre. Attention a l'indentation en python c'est primordial et galere.
De même dans _download tu utilise ftp, est-ce ton instance de FTP ou bien tu utilise le module ftp?
Si c'est le module c'est bon, si c'est l'instance, ta fonction _download n'a pas connaisse de cette instance car elle est déclarée plus tard.

Voila je continue a regarder (la je dois m'absenter), j'espère que ça te débloqueras.
Bon courages et n'hésites pas a demander.
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #2 le: 04 Août 2008 22:13:13 »
Haut de page

C'est vraiment cool que tu veuille bien m'aider ! En plus t'as pile poil bien pigé le genre d'aide dont j'ai besoin !  handshake
Pour le ftp, sauf si tu me donne un avis contraire j'ai envie de dire peu importe, ce que je voudrai c'est les bases pour structurer mon programme avec n'importe quelle lib.
C'est cool d'avoir quelqu'un qui peut m'orienter parce que tout seul perdu dans les docs diverses c'est un peu dur de s'y retrouver. Surtout avec plusieurs sons de cloches.
Exemple :
Citation
Autre problemes, tes fonctions install_skin et _download, elle ne devrais pas etre imriques l'un dans l'autre. Attention a l'indentation en python c'est primordial et galere.
C'est un bout de code que j'ai trouvé sur développez.com, l'idée était juste d'arriver à mettre ce qu'il faut autour pour le faire marcher... Mais comme tu dis ça m'a moi-même un peu choqué, en y croyant très fort on comprend mais bon... De ce que j'ai compris par ailleurs il vaudrait mieux que j'utilise deux fonctions différentes et que j'utilise une boucle avec while. Mais bon j'en suis pas là!

Sinon as-tu vu mon dernier message?
Citation
Il te faut donc creer ton instance de FTP avec les parametres domc il a besoin pour s'initialiser,
Code
(Python):
myFtp = FTP(adresse ,monlogin , monpassword )
 
Ok pour les variables que je définis sans fonction, mais si on prend mon dernier exemple ça devrai marcher pour qu'il prenne les bonnes ou pas? En fait si je lui envoie
Code
(Python):
ftp = ftplib.FTP(coord)
Et que dans coord je ne met que adresse, monlogin et monpasswd dans l'ordre il prendra les bonnes valeurs?

Citation
Ensuite fais attention a mettre tes chemins en dur car comme tu le sais on risque d'avoir des pb entre XBOX (base sur NT) et Linux. Regardes dans Nabbox ou j'utlisais la fonction je crois os.join (un truc du genre) plutot que + et avoir des '/' dans les chemins.
Ok je ferai gaffe mais là c'était juste pour lui donner un chemin bidon pour voir si ça marche. J'ai regardé au fait dans le script de alex sur canal + et compris.

Citation
Ou si tu ne veux pas de parametere et passer les varibale plus tard:
Et dans ce cas là comment je les lui filerai plus tard?

Citation
Il te faut donc creer ton instance de FTP avec les parametres domc il a besoin pour s'initialiser:
Je vais fouiner un peu mais j'arrive pas à comprendre où se situe ce que tu appelle une "instance" par rapport à une fonction, une classe ou une librairie. C'est quoi exactement? Une instance c'est un lanceur de fonction? ( je vois déjà le  rofl )

Citation
De même dans _download tu utilise ftp, est-ce ton instance de FTP ou bien tu utilise le module ftp?
Si c'est le module c'est bon, si c'est l'instance, ta fonction _download n'a pas connaisse de cette instance car elle est déclarée plus tard.
Comme ça j'aurai dit que c'est mon ftp de ftp = ftplib.FTP(coord)

Citation
module ftp
Gnééé parce que en plus il y a des modules?




Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #3 le: 04 Août 2008 22:16:30 »
Haut de page

Encore une réponse de Temhil :

ftplib est un module python standard, si tu prefere un librairie qui definie classes et fonction.
Donc toi tu n'as besoin que d'utiliser ces classes par exemple FTP() et fonction.
Si tu veux avoir un idee, regardes Nabbox que alexsolex et moi avons fait. Il a écrit un nabbox.py que moi j'importe et utilise comme un module. Ainsi j'utilise ces fonction getTopic() ... pour obtenir mes infos. zEt pour ce faire et dire a python que la fonction getTopic est dans un module je fais un import du module puis utilise la fonction précédée du nom du module NABBOX.getTopic().

Ici tu as deja le 1ere pb que tu defnie une fonction dans une autre, je ne pense pas que ca soit interdit en python mais je trouve que ca complexifie le tout.
Separes install_skin de _donwload.
De plus tu declares ton instance ftp apres, dionc ta fonction _dowmload n'a pas de visibilité dessus. Tu devrais donc soit l'avoir en global soit la passer en param.
Autre pb ta fonction _donwload s'appelles elle meme, tu veux faire du recursif? (comme j'ai dis je n'ai pas regarde ce que ta fonction fait en détail)
Ensuite ta fonction coord(), n'est qu'un fonction d'init c'est bien cela?
Le pb ici est que tes variables adresse ... ne sont pas globales mais locale a ta fonction.
Fais comem dans l'exemple de mon precdent e-mail

Dans ce que tu as ecris pour le moment tu ne fais que tu procedural (mais ca va python le permet) et utlise la classe du module libftp : FTP
Commences comme cela et apres on essaieras un design plus 'objet'.

Donc petit resume:
- variables adresse, port .. globales
- separer les fonction install_skin et _download en faisant attention a la visibilite des variable, les seule vraible auquelles tu peux acceder sont soit passes en parametre soit globale
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #4 le: 04 Août 2008 22:34:49 »
Haut de page

Temhil, j'ai suivi tes conseils et ça a marché! Pas d'erreur! Ca a rien rien téléchargé, ou en tout cas je sais pas où ça l'a fait mais en tout cas à a fonctionné sans broncher! Merci. Par contre du coup je suis retombé dans le procédural, ce que je ne voulais pas faire. Mais je comprend mieux le fonctionnement du python, c'est déjà ça (en même temps vu qu'on est dans les procédures c'est normal que je comprenne mieux). Reste plus qu'à essayer de piger un peu l'intérieur de la boucle et rendre ça un peu plus propre, et là je pourrai m'attaquer à la programmation objet (c'est un peu le but du truc).

Code
(Python):
import os , ftplib
 
import os , ftplib
 
 
monadresse = 'stock.passionxbmc.org'
monport = "21"
cheminsource = '/.passionxbmc/Themes/Vinci'
chemindestination = '/home/seb/'
monlogin = 'anonymous'
monpassword = 'xxxx'
 
 
def _download(pathsrc , pasthdst):
l = ftp.nlst(pathsrc)
for i in l:
try:
ftp.size(i)
print i
ftp.retrbinary('RETR '+i, open(pathdst+os.sep+i[lenpathsrc:], 'wb').write)
except:
try: os.makedirs(pathdst+os.sep+os.path.dirname(i[lenpathsrc:]))
except: pass
_download(i)
 
def install_skin(pathsrc,pathdst):
lenpathsrc = len(pathsrc)
_download(cheminsource , chemindestination)
 
ftp = ftplib.FTP(monadresse , monlogin , monpassword )
ftp.connect(monadresse, monport)
ftp.login(monlogin, monpassword)
install_skin(cheminsource, chemindestination)
 
« Dernière édition: 04 Août 2008 22:46:29 par Seb » Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #5 le: 04 Août 2008 22:36:11 »
Haut de page

Euh attend, je viens de piger pourquoi ça a rien fait en me lisant. Con moi...

[edit] message précédent édité, j'ai une belle erreur du type
Code:
Traceback (most recent call last):
  File "/usr/lib/gedit-2/plugins/pythonconsole/console.py", line 272, in __run
    exec command in self.namespace
  File "<string>", line 31, in <module>
  File "<string>", line 26, in install_skin
NameError: global name 'pasthsrc' is not defined

Ca veut dire ce que ca veut dire...[/s]

Edité, j'ai passé deux variables à _download (enfin je crois) et j'ai :
Citation
Traceback (most recent call last):
  File "/usr/lib/gedit-2/plugins/pythonconsole/console.py", line 272, in __run
    exec command in self.namespace
  File "<string>", line 31, in <module>
  File "<string>", line 26, in install_skin
  File "<string>", line 22, in _download
TypeError: _download() takes exactly 2 arguments (1 given)
>>>
« Dernière édition: 04 Août 2008 22:47:40 par Seb » Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #6 le: 04 Août 2008 22:48:34 »
Haut de page

Bon allez la suite demain...
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #7 le: 05 Août 2008 00:49:21 »
Haut de page

Je revois mes exigences à la baisse... objectif : se connecter.

Code
(Python):
import os
import ftplib
 
 
monadresse = "ftp://stock.passionxbmc.org/.passionxbmc/Scraper/"
monport = "21"
cheminsource = "/.passionxbmc/Scraper/"
chemindestination = '/home/seb/'
monlogin = 'anonymous'
monpassword = 'xxxx'
 
 
 
#def install_scraper(pathsrc):
def install_scraper():
dossier = ftp.sendcmd('LIST -al')
print dossier
 
 
ftp = ftplib.FTP(monadresse , monlogin , monpassword )
ftp.connect(monadresse, monport)
ftp.login(monlogin, monpassword)
list_scraper()
 

Par contre c'est galère, je viens de me souvenir qu'au boulot je suis derrière un proxy qui n'accepte pas les connexions ftp...
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Développé Couché
Fait partie du Décor
*
Karma: 0
Messages: 2511
En ligne En ligne
Sexe: Homme
Developpeur Python petit scarabée
Voir le profil
« Répondre #8 le: 05 Août 2008 01:19:04 »
Haut de page

Regardes la doc officielle mais si tu utilises lors de ton instanciation :
Code
(Python):
ftp = ftplib.FTP(monadresse , monlogin , monpassword )
Tu as déjà donné toutes les informations nécessaires a ton instance de la classe FTP (adresse, login, password).

Tu n'as donc pas besoin de faire le faire encore:
Code
(Python):
ftp.connect(monadresse, monport)
ftp.login(monlogin, monpassword)
Vu que tu les as déjà passés en paramètre de ton constructeur (de la fonction d'init si tu préfères) de ta classe FTP.

PS: Pour résoudre ton pb de FTP au boulot, ce que tu peux faire juste pour tes tests est de lancer un serveur FTP en local et bien sur modifier tes variables globales au début du script pour t'y connecter.
« Dernière édition: 05 Août 2008 01:25:17 par Temhil » Journalisée

3.1
Fait partie du Décor
*
Karma: 0
Messages: 690
Hors ligne Hors ligne
Sexe: Homme
Time Will Tell
Voir le profil WWW
« Répondre #9 le: 05 Août 2008 07:57:24 »
Haut de page

Intéressant tout ça  smiley
Journalisée

Config HTPC : Pundit P3 PH4C | PIV 3Ghz | Ubuntu 8.10 | 1 Go Ram | Télécommande MCE | XBMC via dépots SVN PPA

Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #10 le: 05 Août 2008 09:19:53 »
Haut de page

Citation
PS: Pour résoudre ton pb de FTP au boulot, ce que tu peux faire juste pour tes tests est de lancer un serveur FTP en local et bien sur modifier tes variables globales au début du script pour t'y connecter.
Pas con ça! J'essaie dés ce midi! (faut que j'écrive un ou deux tutos aussi mais ça sera vite torché).
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Développé Couché
Fait partie du Décor
*
Karma: 0
Messages: 2511
En ligne En ligne
Sexe: Homme
Developpeur Python petit scarabée
Voir le profil
« Répondre #11 le: 05 Août 2008 14:58:55 »
Haut de page

Salut,

J'ai un peu de temps aujourd'hui et en ai profité pour lire un peu mieux tes precdentes questions. Je bais essayer d'y répondre au mieux:
Code
(Python):
myFtp = FTP(adresse ,monlogin , monpassword )
 
Ok pour les variables que je définis sans fonction, mais si on prend mon dernier exemple ça devrai marcher pour qu'il prenne les bonnes ou pas? En fait si je lui envoie
Code
(Python):
ftp = ftplib.FTP(coord)
Et que dans coord je ne met que adresse, monlogin et monpasswd dans l'ordre il prendra les bonnes valeurs?

Ca ne marchera que si ta fonction coord() retourne tous les paramètres, genre:
Code:
return  adresse, monlogin, monpassword
Mais le problème ici comme tu peux le voir est que si tu les retourne dans le mauvais ordre ou bien tu retourne un param qui n'est pas pris par le constructeur FTP, ca va pas marcher.
De plus je ne vois pas trop l'interet ici d'avoir une fonction qui te retourne dynamiquement ces valeurs a moins que tu prevois de les changer a l'execution. Et meme dans ce cas, l'affectation des variable devrait etre dans une autre fonction et le lecture aussu. Le traditionnel get() et set().
Je pense aussi qu'un get et set par variable serait aussi plus aise dans ce cas sauf si tu es sur que ça bougera pas alors ti veux faire le get de tous les params en même temps (j'espère que je suis a peu pres clair la)

Ok je ferai gaffe mais là c'était juste pour lui donner un chemin bidon pour voir si ça marche. J'ai regardé au fait dans le script de alex sur canal + et compris.
Et dans ce cas là comment je les lui filerai plus tard?

Lorsque tu fais
Code
(Python):
myftp = ftplib.FTP()
Tu déclares une instance de la classe FTP, la fonction FTP() est appelle constructeur, l'idée en gros est qu'elle permette de construire une instance de ta classe, ou si tu préfères de l'initialiser.
Donc tu peux tous a fais avoir des fonction qui s'applique a ta classe (appelées méthodes) te permettant de changes les données de ton instance (variables représentant ta classe appelées attributs).
Dans le cas de la classe FTP (regardes la doc la : http://docs.python.org/lib/ftp-objects.html)
Tu vois que tu a un paquet de méthodes dont:

connect(     host[, port])
    Connect to the given host and port. The default port number is 21, as specified by the FTP protocol specification. It is rarely needed to specify a different port number. This function should be called only once for each instance; it should not be called at all if a host was given when the instance was created. All other methods can only be used after a connection has been made.


et

login(     [user[, passwd[, acct]]])
    Log in as the given user. The passwd and acct parameters are optional and default to the empty string. If no user is specified, it defaults to 'anonymous'. If user is 'anonymous', the default passwd is 'anonymous@'. This function should be called only once for each instance, after a connection has been established; it should not be called at all if a host and user were given when the instance was created. Most FTP commands are only allowed after the client has logged in.

donc tu peux tout a fait faire quelque chose comme:
Code
(Python):
myftp = ftplib.FTP()
myftp.connect(monadresse, monport)
myftp.login(monlogin, monpassword)

connect et login modifie les attribit de ton instance myftp qui est du type (classe) FTP

Je vais fouiner un peu mais j'arrive pas à comprendre où se situe ce que tu appelle une "instance" par rapport à une fonction, une classe ou une librairie. C'est quoi exactement? Une instance c'est un lanceur de fonction? ( je vois déjà le  rofl )

La c'est plus compliqué car il s'agit vraiment d'une notion principale de la programmation objet, regardes dans le post que j'avais fais a ce sujet : Petit rappels sur la programmation orientée objet
En gros une instance (aussi appelée objet) est une instance de classe, c'est a une classe ce qu'une variable est a un type. Par exemple reprenons la classe voiture dont je t'avais parle il y a quelques temps, elle est caractérisée par des attributs genre:
- roue
- moteur
- cylindree
- vitesse courante
...

Et des methodes genre:
- demarrer
- rouler 1er
- rouler 2nd
- marche arriere
...

ma voiture (la mienne) sera bien de la classe voiture (tu me suis), car elle peux demarrer, rouler en 1er, elle a une vitesse, des roues ...
Donc elle est une instance de la classe voiture, du type voiture si tu préfères, mais on utilise classe car on a des fonctions (demarrer()  ... qui s'y appliquent contrairement a un type qui lui ne représente que des données).
Ta voiture (la tienne) je pense que tu sera d'accord est aussi de la classe voiture, mais ta voiture et ma voiture bien qu'elle soient de la même classe, ne sont pas la même chose, elle sont deux objets différent (tu même type, de la même classe), donc deux instances différentes.
J'espère que c'est plus clair, je te rassure c'est normal que ce soit difficile a comprendre, tout le monde a eu plus ou moins ce problème au début de l'apprentissage de la programmation objet, la nition de classe est d'instance est difficile a séparer et a comprendre mais lorsque tu l'aurais ça te paraîtra évident.

Comme ça j'aurai dit que c'est mon ftp de ftp = ftplib.FTP(coord)
Gnééé parce que en plus il y a des modules?

Les module sont des librairies de classes, type, et fonctions donc pour dire a python que ta fonction login() est celle de la librairie (module) libftp, il te faut le précéder par le nom du module ou de l'alias que tu as utilisé.

Code
(Python):
import ftplib as ftpMod
 
....
 
myftp = ftpMod.FTP()                      # appel du constructeur (instanciation de la classe FTP)
myftp.connect(monadresse, monport) # appel de la fonction de classe FTP (methode) connect sur l'instance créée (myftp)
myftp.login(monlogin, monpassword)   # appel de la fonction de classe FTP (methode) login sur l'instance créée (myftp)
 
Tu vois dans cet exemple que j'ai renommé mon module ftplib par ftpMod donc lorsuqe j'utilise la classe FTP definie dans le module ftplib je dois utilise l'alias que j'ai défini ftpMod

Mais si tu fais juste:
Code
(Python):
import ftplib
 

Dans ce cas tu dois ecrire:
Code
(Python):
myftp = ftplib .FTP()  
 


Voila j'espère que c'est plus clair.
Sinon pour ce que tu veux faire voici un exemple qui me semble idéal (presque):
Beyond the Basic Python Ftplib Example
Journalisée

Fait partie du Décor
*
Karma: 6
Messages: 14187
Hors ligne Hors ligne
Sexe: Homme
Le PHP ?? C'est quoi ????
Voir le profil WWW
« Répondre #12 le: 06 Août 2008 21:00:45 »
Haut de page

Salut les gars,

Temhil, c'est passionnant tout ça.
Je trouve même dommage que de tels cours, si bien expliqués, soient dans une section privée, car d'autres pourraient en profiter.

Seb, penses tu que l'on pourrait déplacer ce fil dans une section publique, si tu n'y vois pas d'inconvénient bien sur?
Journalisée


Comment récupérer les logs et décrire un problème avec un script/plugin
AppleTV + Carte accélératrice Crystal HD / Xbox Débug Kit.
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #13 le: 06 Août 2008 22:04:05 »
Haut de page

Salut les gars,

Temhil, c'est passionnant tout ça.
Je trouve même dommage que de tels cours, si bien expliqués, soient dans une section privée, car d'autres pourraient en profiter.

Seb, penses tu que l'on pourrait déplacer ce fil dans une section publique, si tu n'y vois pas d'inconvénient bien sur?

Euh je sais pas trop, j'ai un peu honte là d'être aussi nul...

@Temhil : je lache pas mais j'ai veillé tard hier et ce soir je vais pas pouvoir continuer... Dommage ça commence à me plaire!
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Fait partie du Décor
*
Karma: 6
Messages: 14187
Hors ligne Hors ligne
Sexe: Homme
Le PHP ?? C'est quoi ????
Voir le profil WWW
« Répondre #14 le: 06 Août 2008 22:20:25 »
Haut de page

Ok, mais Temhil pourrait toujours écrire une version edulcorée, un cours quoi, il est doué le bougre :)))
Journalisée


Comment récupérer les logs et décrire un problème avec un script/plugin
AppleTV + Carte accélératrice Crystal HD / Xbox Débug Kit.
Développé Couché
Fait partie du Décor
*
Karma: 0
Messages: 2511
En ligne En ligne
Sexe: Homme
Developpeur Python petit scarabée
Voir le profil
« Répondre #15 le: 07 Août 2008 00:10:24 »
Haut de page

Merci pour le compliment  smiley!
Moi ça me dérange de mettre ça public ou pas. L'intérêt ici est que c'est sur un exemple concret (comme alexsolex nous en a fait profiter il y a quelques semaines dans ses supers exemples d'analyse de site web).

@Seb, t'inquiètes pas, tu n'es pas plus nul que quelqu'un d'autre, comme je l'ai dis et je le répète la notion d'objet est difficile a appréhender au début (surtout si on a été habitué a la programmation procédurale/fonctionnelle avant), surtout la différence entre class et instance (objet), mais une fois le declique venu, je te rassure ca semble evident.
Après il reste d'autre notions complexes aussi a comprendre telles que l'héritage (le polymorphisme) entre classes qui est extrêmement utilisé et puissant en objet (et extrêmement utile dans des langage tels que Java, C++ et donc aussi Python).
J'en ai parlé dans mon post sur la programmation objet et j'en reparlerais si besoin.
Continues comme ça et avec la pratique ça va venir.
Pour ma part j'ai toujours des progrès a faire en Python mais la que je m'y sens plus confortable (bien que loin derrière notre ami alexsolex qui code plus vite que son ombre  tongue), je commence vraiment a m'amuser et a y prendre plaisir  smiley
« Dernière édition: 07 Août 2008 14:34:31 par Temhil » Journalisée

Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #16 le: 07 Août 2008 22:16:53 »
Haut de page

Youplaboum!

J'ai enfin un truc qui marche à peu près et j'ai mieux compris certaines choses. Je continue à potasser...

Code
(Python):
host = "stock.passionxbmc.org" # adresse du serveur FTP
user = "anonymous" # votre identifiant
password = "xxxx" # votre mot de passe
chemin = "/.passionxbmc"
connect = ftplib.FTP(host,user,password) # on se connecte
 
connect.cwd(chemin)
connect.nlst()
print connect.nlst()

Ca donne :
Citation
['visualisations', 'Mods_Aeon', 'Themes', 'Scraper', 'Icones.rar', 'Images Haute Definition', 'wide icone classees.rar']

Je continue à potasser...
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #17 le: 07 Août 2008 23:41:39 »
Haut de page

J'ai téléchargé les fichiers dans le dossier Scraper!

Code
(Python):
import os
import ftplib
 
host = "stock.passionxbmc.org" # adresse du serveur FTP
user = "anonymous" # votre identifiant
password = "xxxx" # votre mot de passe
chemin = "/.passionxbmc/Scraper/"
connect = ftplib.FTP(host,user,password) # on se connecte
 
connect.cwd(chemin)
connect.nlst()
 
destination = "/home/seb/"
 
lenpathsrc = len(chemin)
l = connect.nlst(chemin)
for i in l:
print i
try:
# connect.size(i)
# print i
connect.retrbinary('RETR '+i, open(destination+os.sep+i[lenpathsrc:], 'wb').write)
except:
print "PAS DE CHANCE"
try: os.makedirs(destination+os.sep+os.path.dirname(i[lenpathsrc:]))
except: pass

Ca c'est du bon! J'ai bien un allocine.xml et un allocine.zip dans mon home.  smiley Par contre je comprend pas pourquoi avec connect.size ça marche pas, ça part dans l'except.

Au fait derrière un try faut toujours mettre un except?

Bon bah je vais essayer de voir pour plusieurs dossiers.
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #18 le: 08 Août 2008 12:50:13 »
Haut de page

Note pour plus tard :

Code
(Python):
import os
chemin = "/home/seb"
essai = "/essai"
os.mkdir(chemin + essai)

Créé le dossier essai dans /home/seb

connect.size permet de savoir si l'objet lu est un répertoire ou un fichier. connect.size tente d'en connaitre la taille mais si c'est un répertoire il retourne une erreur et on part dans l'except afin de créer le répertoire en local et d'accéder au répertoire en dessous sur le ftp.

Du coup il me semble que le .size peut-être avantageusement remplacé par connect.cwd('') qui permet d'accéder au chemin du ftp. Si faux c'est que c'est un fichier et on le transfert sinon on accède au dossier sur le ftp et on créé le répertoire en local.

Dans ce cas je pense qu'il faudra incrémenter un compteur afin de pouvoir se positionner dans l'arborescence du ftp. Lorsqu'on effectue la fonction (c'est bien une fonction j'ai bien compris?) connect.cwd on fait compteur = compteur + 1. Du coup quand on arrive au bout de l'arborescence, on décrémente le compteur pour remonter l'arborescence.
« Dernière édition: 08 Août 2008 12:55:15 par Seb » Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Hello World
Fait partie du Décor
*
Karma: 1
Messages: 2252
Hors ligne Hors ligne
Sexe: Homme
Voir le profil
« Répondre #19 le: 08 Août 2008 13:20:59 »
Haut de page

Ce bout de code devrait à peu de chose près servir à avancer dans l'arborescence quand on tombe sur un répertoire. Reste à trouver comment faire pour remonter quand on arrive au bout de l'arborescence.

Code
(Python):
import os
import ftplib
 
host = "stock.passionxbmc.org" # adresse du serveur FTP
user = "anonymous" # votre identifiant
password = "xxxx" # votre mot de passe
chemin = "/.passionxbmc/Scraper/"
connect = ftplib.FTP(host,user,password) # on se connecte
 
connect.cwd(chemin)
connect.nlst()
 
destination = "/home/seb/"
 
lenpathsrc = len(chemin)
l = connect.nlst(chemin)
for i in l:
print i
try:
connect.cwd(i)
print "DOSSIER : ",i
try: os.mkdir(destination+os.sep+i)
except: pass
 
except:
print "FICHIER : ",i  
connect.retrbinary('RETR '+i, open(destination+os.sep+i[lenpathsrc:], 'wb').write)
Journalisée

"Gouvernements du monde industriel, géants fatigués de chair et d'acier, je viens du cyberespace, nouvelle demeure de l'esprit. Au nom de l'avenir, je vous demande, à  vous qui êtes du passé, de nous laisser tranquilles. Vous n'êtes pas les bienvenus parmi nous."  par John Perry Barlow

Script : Installeur Passion-XBMC     Tutoriel : Les scrapers ou comment associer des informations à vos films
Lire la Documentation Python
Pages: [1] 2 3 ... 74   Haut de page
  Envoyer ce fil  |  Imprimer  
 
Aller à: