Во-первых, если вы выполняете автоматизированные задачи в полученном списке FTP, вам, вероятно, следует смотреть на NLST
, а не LIST
, как указано в RFC 959, раздел 4.1.3:
NAME LIST (NLST)
...
This command is intended to return information that
can be used by a program to further process the
files automatically.
В документации Twisted для LIST
говорится:
It can cope with most common file listing formats.
Это вызывает у меня подозрения; Я не люблю решения, которые «справляются». LIST
предназначался для потребления человеком, а не для машинной обработки.
Если ваш целевой сервер поддерживает их, вам следует предпочесть MLST
и MLSD
, как определено в RFC 3659, раздел 7. а>:
7. Listings for Machine Processing (MLST and MLSD)
The MLST and MLSD commands are intended to standardize the file and
directory information returned by the server-FTP process. These
commands differ from the LIST command in that the format of the
replies is strictly defined although extensible.
Однако эти новые команды могут быть недоступны на вашем целевом сервере, и я не вижу их в Twisted. Поэтому NLST
, вероятно, ваш лучший выбор.
Что касается сути вашей проблемы, то возможны три причины:
- Обработка возвращаемых результатов неверна (может быть виноват Twisted, как вы предполагаете, или, возможно, где-то еще)
- Сервер глючит и не отправляет правильный (полный) ответ
- Отправляется неправильная команда (маловероятно с прямыми
NLST
/LIST
, но некоторые серверы реагируют по-разному, если этим командам передаются аргументы)
Вы можете устранить (2) и (3) и доказать, что причина в (1), посмотрев на то, что отправляется по сети. Если эта опция недоступна для вас как часть Twisted API или конфигурации ведения журнала сервера Pure-FTPD, вам может потребоваться запустить анализатор сети, такой как tcpdump, snoop или WireShark (при условии, что вам разрешено делать это в ваше окружение). Обратите внимание, что вам нужно будет отслеживать не только управляющее соединение (порт 21), но и соединение для передачи данных (поскольку оно несет результаты команды LIST
/NLST
). WireShark удобен тем, что он выполнит для вас анализ на уровне протокола.
Удачи.
person
Martin Carpenter
schedule
22.11.2008