Почему сообщение об успехе считается ошибкой в ​​ftplib - PullRequest
3 голосов
/ 12 августа 2010
import ftplib
server = '192.168.1.109'
user = 'bob'
password = 'likes_sandwiches'

box = ftplib.FTP(server)
box.login(user, password)

s = box.mkd('\\a\\this4\\')
box.close()

x = raw_input('done, eat sandwiches now')

Возвращает:

Трассировка (последний последний вызов): файл "C: \ scripts \ ftp_test.py", строка 25, в s = box.mkd ('\ E \ this4\ ') Файл "C: \ Python26 \ lib \ ftplib.py", строка 553, в mkd, возвращает parse257 (соответственно) Файл "C: \ Python26 \ lib \ ftplib.py", строка 651, в parse257 вызывает error_reply, соответственноerror_reply: 250 Каталог успешно создан.

Он успешно создал каталог, но считает, что это ошибка!WTF?

Я планирую создать много каталогов в цикле, как я могу сделать это, не прерывая его каждый раз, когда он успешно создает один каталог?

Ответы [ 2 ]

1 голос
/ 12 августа 2010

ftplib ожидает результат 257, определенный как «созданный», поэтому он может проанализировать <pathname> и вернуть его вам; но ваш сервер неожиданно дает результат 250 и не возвращает путь, поэтому метод mkd, конечно, не работает.

В качестве обходного пути к этому специфическому поведению сервера вы можете использовать voidcmd , чтобы просто отправить команду MKD /your/path - в конце концов, вы знаете путь, который вы хотите создать, поскольку он абсолютный.

1 голос
/ 12 августа 2010

Согласно RFC 959 (FTP), единственный действительный код ответа на MKD - 257. Похоже, это проблема, вызванная тем, что FTP-сервер не соответствует стандарту.

Для вашего интереса, это соответствующий код ftplib:

if resp[:3] != '257':
    raise error_reply, resp
...