Проблема с получением директорий в 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()