2008-10-16 70 views
1

我需要一个非常具体的(非标)的字符串发送到FTP服务器:高级Python FTP - 我可以控制ftplib如何与服务器通话吗?

dir "SYS:\IC.ICAMA." 

的情况下是至关重要的,因为是报价和其内容的风格。

不幸的是,ftplib.dir()似乎使用'LIST'命令而不是'dir'(并且它对此应用程序使用了错误的大小写)。

FTP服务器实际上是一个电话交换机,它是一个非常非标准的实现。

我尝试使用ftplib.sendcmd(),但它也发送'pasv'作为命令序列的一部分。

有没有简单的方法向FTP服务器发出特定命令?

回答

4

请尝试以下操作。它是对原始FTP.dir命令的修改,它使用“dir”而不是“LIST”。它给我测试过的ftp服务器提供了一个“DIR未知”的错误,但它确实发送了你之后的命令。 (你会想删除我用来检查的打印命令。)

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"') 
+0

谢谢 - 明天我可以测试一下:-) – 2008-10-16 22:57:46

相关问题