Erweiterte Python FTP - kann ich steuern, wie ftplib spricht mit einem Server?

StackOverflow https://stackoverflow.com/questions/210067

  •  03-07-2019
  •  | 
  •  

Frage

Ich brauche eine sehr spezifische (Nicht-Standard) Zeichenfolge an einen FTP-Server senden:

dir "SYS:\IC.ICAMA."

Der Fall ist von entscheidender Bedeutung, da die Art der Angebote und deren Inhalte sind.

Leider ftplib.dir () scheint die ‚Liste‘ Befehl anstatt ‚dir‘ zu verwenden (und es verwendet den falschen Fall für diese Anwendung).

Der FTP-Server ist eigentlich eine Telefonvermittlung und es ist eine sehr Nicht-Standard-Implementierung.

Ich habe versucht, mit ftplib.sendcmd (), aber es sendet auch ‚pasv‘ als Teil der Befehlsfolge.

Gibt es eine einfache Möglichkeit, bestimmte Befehle an einen FTP-Server der Ausgabe?

War es hilfreich?

Lösung

Versuchen Sie, die folgenden. Es ist eine Modifikation des ursprünglichen FTP.dir Befehl, „dir“ statt „LIST“ verwendet. Es gibt einen „DIR nicht verstanden“ Fehler mit dem FTP-Server ich es getestet, aber es sendet den Befehl Sie nach. (Sie wollen den Druckbefehl zu entfernen, habe ich das überprüfen.)

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"')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top