• ftplib 实例


    #!/usr/bin/env python
    
    import ftplib
    import os
    
    class FTPSync(object):
        def __init__(self,host,username, password, ftp_base_dir,
                                local_base_dir, delete=False):
            self.host = host
            self.username = username
            self.password = password
            self.ftp_base_dir = ftp_base_dir
            self.local_base_dir = local_base_dir
            self.delete = delete
            self.conn = ftplib.FTP(host, username, password)
            self.conn.cwd(ftp_base_dir)
            try:
                os.makedirs(local_base_dir)
            except OSError:
                pass
            os.chdir(local_base_dir)
    
        def get_dirs_files(self):
            dir_res = []
            self.conn.dir('.', dir_res.append)
            for f in dir_res:
                print f
            files= [ f.split(None, 8)[-1] for f in dir_res if f.startswith('-')]
            dirs = [ f.split(None, 8)[-1] for f in dir_res if f.startswith('d')]
            return (files, dirs)
        
        def walk(self, next_dir):
            print "walking to", next_dir
            self.conn.cwd(next_dir)
            try:
                os.mkdir(next_dir)
            except OSError:
                pass
            os.chdir(next_dir)
    
            ftp_curr_dir = self.conn.pwd()
            local_curr_dir = os.getcwd()
    
            files, dirs = self.get_dirs_files()
            print "FILES:", files
            print "DIRS:", dirs
            for f in files:
                print next_dir, ':', f
                outf = open(f,'wb')
                try:
                    self.conn.retrbinary('RETR %s' % f, outf.write)
                finally:
                    outf.close()
                if False:
                    print self.delete
                    print "Deleting",f
                    self.conn.delete(f)
            for d in dirs:
                os.chdir(local_curr_dir)
                self.conn.cwd(ftp_curr_dir)
                self.walk(d)
    
        def run(self):
            self.walk('.')
    
    if __name__ == '__main__':
        from optparse import OptionParser
        parser = OptionParser()
        parser.add_option("-o","--host", dest="host",
                action='store', help ="FTP host")
        parser.add_option("-u","--username",dest="username",
                action ='store', help = "FTP username")
        parser.add_option("-p","--password",dest="password",
                action = 'store', help = "FTP password")
        parser.add_option("-r","--remote_dir",dest = "remote_dir",
                action = 'store', help = "FTP remote starting directory")
        parser.add_option("-l", "--local_dir",dest = "local_dir",
                action = 'store', help = "Local starting directory")
        parser.add_option("-d", "--delete",dest = "delete",default = False,
                action = 'store_true', help= "use regex parser")
        (options, args) = parser.parse_args()
        f = FTPSync(options.host, options.username, options.password,options.remote_dir, options.local_dir, options.delete)
        f.run()

    在命令行输入:

    ./ftpimage.py -o localhost -u hzhida -p password -r lighttpd-1.4.31 -l python -d False

    
    
  • 相关阅读:
    jQuery Ajax 方法调用 Asp.Net WebService 的详细例子(原创)
    jQuery 访问WebService 返回复合类型列表
    Vista Media Center 开发之深入浅出 (一) Vista Media Center开发环境的搭建
    安装一个媒体解码器让 Windows Media Player 支持更多媒体格式
    静静期待 Windows 7 的到来
    集成 RealTek 声卡 在 Windows 7 有杂音、爆音的解决方法
    使用jQuery for Asp.Net 我的开发环境配置
    Windows 7 VHD 启动
    建立一个 C#.Net Windows Service 程序
    Windows server 2008 r2 简体中文180天评估版微软官方下载地址
  • 原文地址:https://www.cnblogs.com/hzhida/p/2643329.html
Copyright © 2020-2023  润新知