Advanced Python FTP - puis-je contrôler comment ftplib communique avec un serveur?

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

  •  03-07-2019
  •  | 
  •  

Question

Je dois envoyer une chaîne très spécifique (non standard) à un serveur FTP:

dir "SYS:\IC.ICAMA."

Le cas est critique, de même que le style des guillemets et leur contenu.

Malheureusement, ftplib.dir () semble utiliser la commande "LIST" plutôt que "dir" (et il utilise le casse incorrect pour cette application).

Le serveur FTP est en fait un commutateur téléphonique et son implémentation est très non standard.

J'ai essayé d'utiliser ftplib.sendcmd (), mais il envoie également 'pasv' dans le cadre de la séquence de commandes.

Existe-t-il un moyen simple d’émettre des commandes spécifiques sur un serveur FTP?

Était-ce utile?

La solution

Essayez ce qui suit. Il s'agit d'une modification de la commande originale FTP.dir qui utilise & dir; dir " au lieu de "LIST". Cela donne un " DIR non compris " erreur avec le serveur ftp je l'ai testé, mais il envoie la commande que vous êtes après. (Vous voudrez supprimer la commande d’impression que j’avais utilisée pour vérifier cela.)

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"')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top