FTP et question de python
Question
aide quelqu'un peut me.
Pourquoi il ne fonctionne pas
import ftplib
import os
def readList(request):
machine=[]
login=[]
password=[]
for line in open("netrc"): #read netrc file
old=line.strip()
line=line.strip().split()
if old.startswith("machine"): machine.append(line[-1])
if old.startswith("login"): login.append(line[-1])
if old.startswith("password"): password.append(line[-1])
connectFtp(machine,login,password)
def connectFtp(machine,login,password):
for i in range(len(machine)):
try:
ftp = ftplib.FTP(machine[i])
print 'conected to ' + machine[i]
ftp.login(login[i],password[i])
print 'login - ' + login[i] + ' pasword -' + password[i]
except Exception,e:
print e
else:
ftp.cwd("PublicFolder")
print 'PublicFolder'
def upload(filename, file):
readList()
ext = os.path.splitext(file)[1]
if ext in (".txt", ".htm", ".html"):
ftp.storlines("STOR " + filename, open(file))
else:
ftp.storbinary("STOR " + filename, open(file, "rb"), 1024)
print 'success... yra'
upload('test4.txt', r'c:\example2\media\uploads\test4.txt')`
Quand il était ensemble, il travaillait. Mais quand je les sépare de fonctions de passé quelque chose, je ne peux pas comprendre ce que.
La solution
(En dehors des problèmes d'indentation, qui sont horribles probablement en raison de copie bâclée et coller autrement vous obtiendrez des erreurs de syntaxe le Wazoo ...!) ...:
problème de cadrage, d'abord: connectFtp
fait une variable locale ftp
afin que les variables s'en va dès que la fonction est fait. Ensuite upload
tente la variable à l'aide, mais bien sûr, il n'y est pas plus.
Ajouter un return ftp
à la fin de connectFtp
, un yield connectFtp
au lieu d'un appel simple à la boucle en readList
, et utiliser une boucle de for ftp in readList():
dans upload
.
Autres conseils
Quelque chose comme ça?
import os
def readList(request):
machine = []
login = []
password = []
for line in open("netrc"): # read netrc file
old = line.strip()
line = line.strip().split()
if old.startswith("machine"): machine.append(line[-1])
if old.startswith("login"): login.append(line[-1])
if old.startswith("password"): password.append(line[-1])
yield connectFtp
def connectFtp(machine, login, password):
for i in range(len(machine)):
try:
ftp = ftplib.FTP(machine[i])
print 'conected to ' + machine[i]
ftp.login(login[i], password[i])
print 'login - ' + login[i] + ' pasword -' + password[i]
except Exception, e:
print e
else:
ftp.cwd("PublicFolder")
print 'PublicFolder'
return (ftp)
def upload(filename, file):
for ftp in readList():
ext = os.path.splitext(file)[1]
if ext in (".txt", ".htm", ".html"):
ftp.storlines("STOR " + filename, open(file))
else:
ftp.storbinary("STOR " + filename, open(file, "rb"), 1024)
print 'success... yra'
upload('test4.txt', r'c:\example2\media\uploads\test4.txt')
Erreur à la ligne 19 quelque chose avec try:
unindent ne mathématiques aucun niveau d'indentation externe