Проблема с получением директорий в ftplib

import ftplib 

hostName = "192.168.0.2"
usrName = "1"
passName = "1"


ftp = ftplib.FTP(host=hostName, user=usrName, passwd=passName, timeout=10000, encoding='UTF-8')
ftp.cwd("/SD1/Log")
ftp.dir()

Получаю ошибку

File "c:\Users\ADV\Desktop\asulab\from ftplib import FTP.py", line 10, in <module>
    ftp.dir()
  File "C:\Users\ADV\AppData\Local\Programs\Python\Python312\Lib\ftplib.py", line 563, in dir
    self.retrlines(cmd, func)
  File "C:\Users\ADV\AppData\Local\Programs\Python\Python312\Lib\ftplib.py", line 459, in retrlines
    with self.transfercmd(cmd) as conn, \
         ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ADV\AppData\Local\Programs\Python\Python312\Lib\ftplib.py", line 393, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ADV\AppData\Local\Programs\Python\Python312\Lib\ftplib.py", line 353, in ntransfercmd
    host, port = self.makepasv()
                 ^^^^^^^^^^^^^^^
  File "C:\Users\ADV\AppData\Local\Programs\Python\Python312\Lib\ftplib.py", line 327, in makepasv
    untrusted_host, port = parse227(self.sendcmd('PASV'))
                                    ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ADV\AppData\Local\Programs\Python\Python312\Lib\ftplib.py", line 281, in sendcmd
    return self.getresp()
           ^^^^^^^^^^^^^^
  File "C:\Users\ADV\AppData\Local\Programs\Python\Python312\Lib\ftplib.py", line 254, in getresp
    raise error_perm(resp)
ftplib.error_perm: 502 Invalid command.

Если захожу через CMD, пишу команду dir - выводит весь список.


Ответы (1 шт):

Автор решения: CrazyElf
    untrusted_host, port = parse227(self.sendcmd('PASV'))
                                    ^^^^^^^^^^^^^^^^^^^^

Похоже, ваш ftp сервер не умеет в пассивный режим (команда PASV), а по умолчанию этот режим в ftplib включен и dir его использует, вернее его использует более низкоуровневая команда transfercmd (см. документацию ftplib). Попробуйте его выключить:

ftp.set_pasv(False)
ftp.dir()
→ Ссылка