По нескольким причинам мы хотели бы использовать pycurl
для получения информации о файле, хранящемся на FTP-сервере, с помощью команды MLST .
Мы получаем почти то, что нам нужноследующий код:
# More or less equivalent to: curl --list -X MLST -D /tmp/headers ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/assembly_summary.txt
import pycurl
try:
from io import BytesIO
except ImportError:
from StringIO import StringIO as BytesIO
c = pycurl.Curl()
c.setopt(c.URL, r'ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/assembly_summary.txt')
c.setopt(pycurl.DIRLISTONLY, True)
# Use MLST
c.setopt(c.CUSTOMREQUEST, "MLST")
# Write header to buffer
output = BytesIO()
c.setopt(pycurl.HEADERFUNCTION, output.write)
# Perform request
c.perform()
# Print header
result = output.getvalue()
result = result.decode('ISO-8859-1')
perform()
завершается с CURLE_FTP_COULDNT_RETR_FILE , но result
(заголовки) содержит то, что нам нужно. Если вы попробуете версию CLI, код возврата также будет CURLE_FTP_COULDNT_RETR_FILE, но файл /tmp/headers
содержит данные.
Мы думаем, что это связано с тем, что MLST
использует управляющее соединение, а не данныесоединение.
Есть идеи?
РЕДАКТИРОВАТЬ 1
Мы не нашли способ получить результат без DIRLISTONLY
(что странно). Также, если мы используем NOBODY
, мы не получим ответ.
РЕДАКТИРОВАТЬ 2
Оказывается, что result
содержит информацию о каталоге (ftp://ftp.ncbi.nlm.nih.gov/genomes/genbank/archaea/
) не файл, поэтому код здесь неверен .