Почему сообщение об успехе считается ошибкой в ​​ftplib

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 ответа

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

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

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

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

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

Другие вопросы по тегам