2010-06-24 75 views
1

有人可以帮助我。FTP和python问题

为什么它不工作

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')` 

当它在一起是工作。但是,当我将它分离到功能发生的事情时,我无法理解什么。

+1

你缺口是错误的一次。 – SilentGhost 2010-06-24 14:46:35

回答

0

(除了可怕的缺口问题,这些问题可能是由于拙劣的复制和粘贴,否则你会得到语法错误了wazoo ...!)...:

范围界定问题,第一:connectFtp使本地变量ftp,以便变量完成后尽快消失。然后upload尝试使用该变量,但当然它没有更多。

connectFtp末尾添加return ftp,一个yield connectFtp,而不是一个简单的调用到循环在readList,并在upload使用for ftp in readList():循环。

+0

你是什么意思,而不是打电话? – Pol 2010-06-24 15:19:41

+0

@user,我的意思是'connectFtp(机器,登录名,密码)''你以前只有一个调用,** plain **,而不是** plan **(编辑修复错字),将被替换为'产生connectFtp(机器,登录,密码)'(以及我建议的_和_缩进当然修复的其他更改;-)。 – 2010-06-24 15:56:43

0

是这样的吗?

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: 取消缩进没有任何数学外缩进级别