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的源碼,在每一幀的發送過程中做處理,使用全局變量傳出即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM