это мой первый пост здесь, так что я рад быть частью сообщества. У меня есть довольно приземленный вопрос, но это была довольно раздражающая проблема, поэтому я надеюсь найти ответы.
Итак, я пытаюсь использовать модуль Python FTPLIB для получения двоичного файла.
Код, введенный непосредственно в интерпретатор, выглядел так:
>>> from ftplib import FTP
>>> ftp = FTP('xxx.xx.xx.x') # IP of target device
>>> ftp.login()
>>> file = "foobar.xyz" # target file
>>> ftp.retrbinary("RETR " + file, open('filez.txt', 'wb').write)
Пока работают определенные функции (я могу просматривать все файлы на устройстве, получать приветственное сообщение из приложения FTP-сервера и даже переименовывать файлы), когда я пытаюсь выполнить последнюю команду, указанную выше, я получаю
error_perm Traceback (most recent call last)
/Users/user_name/<ipython console> in <module>()
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in retrlines(self, cmd, callback)
419 if callback is None: callback = print_line
420 resp = self.sendcmd('TYPE A')
--> 421 conn = self.transfercmd(cmd)
422 fp = conn.makefile('rb')
423 while 1:
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in transfercmd(self, cmd, rest)
358 def transfercmd(self, cmd, rest=None):
359 """Like ntransfercmd() but returns only the socket."""
--> 360 return self.ntransfercmd(cmd, rest)[0]
361
362 def login(self, user = '', passwd = '', acct = ''):
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in ntransfercmd(self, cmd, rest)
327 if rest is not None:
328 self.sendcmd("REST %s" % rest)
--> 329 resp = self.sendcmd(cmd)
330 # Some servers apparently send a 200 reply to
331 # a LIST or STOR command, before the 150 reply
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in sendcmd(self, cmd)
241 '''Send a command and return the response.'''
242 self.putcmd(cmd)
--> 243 return self.getresp()
244
245 def voidcmd(self, cmd):
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in getresp(self)
216 raise error_temp, resp
217 if c == '5':
--> 218 raise error_perm, resp
219 raise error_proto, resp
220
error_perm: 502 Command not implemented.
Я просмотрел исходный код ftplib, но мой опыт программирования с этими задачами довольно ограничен, так как я обычно использую Python для математики и раньше мне не приходилось работать с FTP.
Так что, если бы кто-нибудь мог дать мне несколько идей относительно решения, это было бы огромной помощью. В качестве альтернативы, если бы вы могли предложить другой путь решения на другом языке, который был бы одинаково полезным.