سؤال
هل يستطيع احد مساعدتي.
لماذا لا يعمل
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')`
عندما كان معا كان يعمل. لكن عندما أفصله في العمل ، حدث شيء ما ، لا أستطيع أن أفهم ماذا.
المحلول
(بصرف النظر عن مشاكل المسافة البادئة الرهيبة ، والتي من المفترض أن تكون بسبب النسخ الفاشلة واللصق وإلا فإنك ستحصل على أخطاء في بناء الجملة ...!) ...:
مشكلة النطاق ، أولا: connectFtp
يصنع محلي عامل ftp
بحيث تختفي المتغيرات بمجرد الانتهاء من الوظيفة. ثم upload
يحاول استخدام المتغير ، ولكن بالطبع لم يعد هناك.
أضف return ftp
في نهاية connectFtp
, ، أ yield connectFtp
بدلا من دعوة واضحة إلى الحلقة في readList
, ، واستخدم أ for ftp in readList():
حلقة في upload
.
نصائح أخرى
شيء من هذا القبيل؟
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')
خطأ في السطر 19 شيء مع try:
غير مستند لا يريري أي مستوى المسافة البادئة الخارجي
لا تنتمي إلى StackOverflow