2014-02-03 4 views
0

Код продолжает застревать, даже если каталог существует в списке. Я не уверен, что здесь происходит. Когда я прокомментирую код, который я написал, чтобы повторно спросить пользователя о каталоге, если каталог не существует, код работает отлично.Разбитый оператор if, не может понять, почему это не сработает

def path_sel(): 
path = raw_input("Select desired working directory: ") 
b = [] 
ftp.retrlines('LIST', b.append) 
if path not in b: 
    print "ERROR- Directory does not exist.\n" 
    path_sel() 
else: 
    print '\nChanging to '+ path, '\n' 
    ftp.cwd(path) 
    print path 
    ftp.retrlines('LIST') 
    c = [] 
    ftp.retrlines('LIST', c.append) 
    if 'd' in str(c[0]): 
      path_sel() 
file_dl() 
+4

у вас есть проблемы отступа, я предполагаю, что это только здесь, но вы, вероятно, хотите, чтобы исправить это. – Elisha

+1

Не начинайте снова, вызывая 'path_sel' из' path_sel'. Вместо этого используйте цикл. – Blorgbeard

ответ

0

Это, кажется, работает для меня (я выбрал случайный FTP-сервер):

from ftplib import FTP 

def path_sel(): 
    path = raw_input("Select desired working directory: ") 
    b = [] 
    ftp.retrlines('LIST', b.append) 

    found = False 
    for entry in b: 
     if path in entry: 
     found = True 

    if not found: 
     print "ERROR- Directory does not exist.\n" 
     path_sel() 
    else: 
     print '\nChanging to '+ path, '\n' 
     ftp.cwd(path) 
     print path 
     ftp.retrlines('LIST') 
     # After printing the directory, you probably 
     # want to ask the user to enter a new file/path 
     # rather than just assuming that they are interested 
     # in the first entry in the ftp.retrlines() printout 
     c = [] 
     ftp.retrlines('LIST', c.append) 
     if 'd' in str(c[0]): 
     path_sel() 
    # --------------------------------------------------- 
    # Once you've extracted a filename, run your function 
    # --------------------------------------------------- 
    print 'Running file_dl()' 
    #file_dl(filename) 

ftp = FTP('ftp.debian.org') 
ftp.login() 
path_sel() 

Он постоянно возвращается «error- каталог не существует» и просит новый вход, пока правильный путь не является вошел. Когда вы перейдете к файлу (что-то, что не начинается с «drwxrwxrwx ....»), вы хотите выполнить свою функцию file_dl().

Вот как это выглядит в моей консоли:

enter image description here

+0

Да, это моя проблема. Я не понимаю, почему он застрял в этой части заявления. – BeeDeeGee

+0

Извините, я думал, что у вас проблемы с рекурсивным битом. Я предполагаю, что вам нужно проверить отдельные элементы в списке, возвращаемом ftp.retrlines(). – bornruffians

+0

Да, я распечатал список, чтобы посмотреть, что там было, очень странно, что он отлично подойдет для поиска «d» в списке, чтобы определить, есть ли каталог, и ему нужно снова спросить каталог или если «d» не существует, и он запускает file_dl. Тем не менее, как только я попытаюсь добавить часть, чтобы определить, действительно ли имя каталога действительно застряло – BeeDeeGee

Смежные вопросы