FTP и Python вопрос - PullRequest
       6

FTP и Python вопрос

1 голос
/ 24 июня 2010

Может ли кто-нибудь мне помочь.

Почему это не работает

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

Когда это было вместе, это работало.Но когда я разделяю его на функции, что-то случилось, я не могу понять, что.

Ответы [ 2 ]

0 голосов
/ 24 июня 2010

Как-то так?

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: unindent не имеет никакого внешнего уровня отступа

0 голосов
/ 24 июня 2010

(Помимо ужасных проблем с отступами, которые, вероятно, связаны с неудачным копированием и вставкой, в противном случае вы получите синтаксические ошибки в wazoo ...!) ...:

Сначала проблема с областью видимости:connectFtp создает локальную переменную ftp, поэтому переменные исчезают, как только функция завершает работу.Затем upload пытается использовать переменную, но, конечно, ее там больше нет.

Добавьте return ftp в конце connectFtp, yield connectFtp вместо простого вызовацикл в readList и использование цикла for ftp in readList(): в upload.

...