2010-06-24 74 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: 取消縮進沒有任何數學外縮進級別