Почему сообщение об успехе считается ошибкой в 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
команда - в конце концов, вы знаете путь, который хотите создать, поскольку он абсолютный.