zoukankan      html  css  js  c++  java
  • 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

    
    
  • 相关阅读:
    BZOJ4569: [Scoi2016]萌萌哒
    BZOJ4566: [Haoi2016]找相同字符
    BZOJ4556: [Tjoi2016&Heoi2016]字符串
    BZOJ4545: DQS的trie
    BZOJ4458: GTY的OJ
    Codeforces Beta Round #19E. Fairy
    不确定性推理
    朴素贝叶斯
    对抗搜索
    struct
  • 原文地址:https://www.cnblogs.com/hzhida/p/2643329.html
Copyright © 2011-2022 走看看