zoukankan      html  css  js  c++  java
  • Python中ftplib模块的使用

    ftplib模块的主要接口

    # from ftplib import FTP                                   #加载ftp模块
    # ftp=FTP()                                                #设置变量
    # ftp.set_debuglevel(2)                                    #打开调试级别2,显示详细信息
    # ftp.set_debuglevel(0)                                    #关闭调试模式
    # ftp.connect("IP","port")                                 #连接的ftp sever和端口
    # ftp.login("user","password")                             #连接的用户名,密码
    # ftp.getwelcome()                                         #打印出欢迎信息
    # ftp.cmd("xxx/xxx")                                       #进入远程目录
    # ftp.quit()                                               #退出ftp,失败抛异常
    # ftp.cwd(pathname)                                        #设置FTP当前操作的路径
    # ftp.dir()                                                #显示目录下所有目录信息
    # ftp.nlst()                                               #获取目录下的文件
    # ftp.mkd(pathname)                                        #新建远程目录
    # ftp.pwd()                                                #返回当前所在位置
    # ftp.rmd(dirname)                                         #删除远程目录
    # ftp.delete(filename)                                     #删除远程文件
    # ftp.rename(fromname, toname)                             #将fromname修改名称为toname。
    # ftp.storbinary("STOR filename.txt",file_handel,bufsize)  #上传目标文件
    # ftp.retrbinary("RETR filename.txt",file_handel,bufsize)  #下载FTP文件
    # ftp.size(filename)                                       #获取文件大小(字节)
    # ftp.delete(filename)                                     #删除服务器上的文件

     上传和下载文件

    import socket
    from ftplib import FTP, error_perm
    
    def ftpconnect(host, port, username, password):
        ftp = FTP()
        ftp.set_debuglevel(0)
        try:
            ftp.connect(host, port)
            ftp.login(username, password)
        except (socket.error, socket.gaierror):
            print("ERROR: cannot connect [{}:{}]" .format(host, port))
            return None
        except error_perm:
            print("ERROR: user Authentication failed")
            return None
        except:
            print("ERROR: Unknow")
            return None
        return ftp
    
    
    def downloadfile(ftp, remotepath, localpath):
        bufsize = 1024
        with open(localpath, 'wb') as fp:
            ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize)
    
    def uploadfile(ftp, remotepath, localpath):
        bufsize = 1024
        with open(localpath, 'rb') as fp:
            ftp.storbinary('STOR ' + remotepath, fp, bufsize)
    
    
    if __name__ == "__main__":
        ftp = ftpconnect("192.180.180.100", 21, "admin", "zhongxing")
        downloadfile(ftp, "/home/sd/NCP_AGENT", "NCP_AGENT")
        ftp.quit()

     思考:怎么获取文件传输过程中的进度

    由于ftplib中的storbinary和retrbinary接口是阻塞式,返回值表示成功或失败。因此实时获取进度需要创建另外一个任务,如果是下载,实时进度可以使用已下载的文件大小除以总的文件大小;如果是上传,需要另启一个ftp连接,使用size接口获取上传文件的实时大小,然后除以上传文件的总大小即可得到实时进度。上述的方式比较麻烦,但是简单,不用修改源码,另一种方式是修改ftplib的源码,在每一帧的发送过程中做处理,使用全局变量传出即可。

  • 相关阅读:
    linux用户与组管理
    历史轨迹
    win10右击菜单在左边
    uwp使用资源限定符Devicefamily不同设备使用不同布局
    uwp通用应用重写列表面板控件
    uwp通用应用布局触发器AdaptiveTrigger
    ci的一些基础内容
    ci的控制器视图模型
    ci的url操作
    baidupcs-go命令
  • 原文地址:https://www.cnblogs.com/chusiyong/p/12205483.html
Copyright © 2011-2022 走看看