Advanced Python FTP - puis-je contrôler comment ftplib communique avec un serveur?
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?
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"')