代码登录到远程目录,搜索文件并通过FTP在Python中下载

代码登录到远程目录,搜索文件并通过FTP在Python中下载,python,ftp,operating-system,ftplib,telnetlib,Python,Ftp,Operating System,Ftplib,Telnetlib,我有一个扩展名为(xxxxxxxxxxxxx_PARSERxxxxx.tar.gz)的.gz包,放在远程目录中,比如说1.1.1.1(应该是一个变量输入),我目前正在从机器上运行脚本,比如说2.2.2.2,我需要将包放在机器3.3.3.3(应该是一个变量输入),准备了一个相同的脚本,但它不工作,请帮助我在相同的 以下是到目前为止我编写的代码(不起作用): 如果你告诉我们这个程序是如何运作的,那会很有帮助 快速浏览一下,我会说perserfile bit和filenm的用法是错误的 os.syst

我有一个扩展名为(xxxxxxxxxxxxx_PARSERxxxxx.tar.gz)的.gz包,放在远程目录中,比如说1.1.1.1(应该是一个变量输入),我目前正在从机器上运行脚本,比如说2.2.2.2,我需要将包放在机器3.3.3.3(应该是一个变量输入),准备了一个相同的脚本,但它不工作,请帮助我在相同的

以下是到目前为止我编写的代码(不起作用):


如果你告诉我们这个程序是如何运作的,那会很有帮助

快速浏览一下,我会说perserfile bit和filenm的用法是错误的

  • os.system
    返回一个整数,因此
    filenm
    不是文件名,而是find命令的存在状态。您希望使用
    pipe=subprocess.Popen(['find'、'.'、'-name'、'*PARSER*.gz']、stdout=subprocess.pipe
    和for循环
    pipe.stdout
    来读取命令生成的所有行

  • ftp.retrbinary
    行看起来可疑:您可能希望删除
    'filenm'
    周围的引号,以使用上面找到的路径,并使用需要修复的回调函数(见下文)

  • handleDownload
    中,对
    file.write
    的调用将失败,因为您调用的是文件类而不是文件对象

  • 最后,对我来说,在本地文件系统上执行搜索以在远程ftp服务器上查找与代码所做的类似的路径似乎很奇怪,除非您对本地路径有一些特殊性。或者您正在尝试使用telnet连接执行远程搜索?依我看,如果ftp服务器允许您这样做,并且您知道对于远程路径,您最好将FTP服务器上的CWD设置为该目录,检索内容并查找符合您要求的路径

  • 下载本身应重写为:

    local_fobj = file('downloaded_file.gz', 'wb')
    def download_cb(data):
        local_fobj.write(data)
    ftp.retrbinary('RETR %s' % filenm, download_cb)
    local_fobj.close()
    
    其他杂项材料:

  • cwd=os.getwd()
    后跟
    os.chdir(cwd)
    可以安全删除
  • rmtip
    未定义,应由
    rmthstip
  • local_fobj = file('downloaded_file.gz', 'wb')
    def download_cb(data):
        local_fobj.write(data)
    ftp.retrbinary('RETR %s' % filenm, download_cb)
    local_fobj.close()