Мне нужно отправить очень конкретную (нестандартную) строку на FTP-сервер:
dir "SYS:\IC.ICAMA."
Дело критическое, как и стиль цитат и их содержание.
К сожалению, ftplib.dir (), похоже, использует команду LIST, а не dir (и в этом приложении используется неправильный регистр).
FTP-сервер на самом деле является телефонным коммутатором, и это очень нестандартная реализация.
Я пробовал использовать ftplib.sendcmd (), но он также отправляет pasv как часть последовательности команд.
Есть ли простой способ передать определенные команды FTP-серверу?






Попробуйте следующее. Это модификация исходной команды FTP.dir, в которой используется «dir» вместо «LIST». На ftp-сервере, на котором я тестировал его, он выдает ошибку «DIR notformed», но он отправляет команду, которую вы ищете. (Вы захотите удалить команду печати, которую я использовал для проверки.)
import ftplib
class FTP(ftplib.FTP):
def shim_dir(self, *args):
'''List a directory in long form.
By default list current directory to stdout.
Optional last argument is callback function; all
non-empty arguments before it are concatenated to the
LIST command. (This *should* only be used for a pathname.)'''
cmd = 'dir'
func = None
if args[-1:] and type(args[-1]) != type(''):
args, func = args[:-1], args[-1]
for arg in args:
if arg:
cmd = cmd + (' ' + arg)
print cmd
self.retrlines(cmd, func)
if __name__ == '__main__':
f = FTP('ftp.ncbi.nih.gov')
f.login()
f.shim_dir('"blast"')
Спасибо - завтра смогу протестировать :-)