程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python實現ftp服務端和客戶端

編輯:Python

python中內置了一個ftp客戶端,但是要實現ftp服務端還需要安裝一個第三方庫pyftpdlib

pyftpdlib

pyftpdlib實現了一個功能完整的異步FTP服務,開源代碼地址:
https://github.com/giampaolo/pyftpdlib

安裝pyftpdlib

安裝方式有很多種,推薦使用pip;

pip 是 Python 的包安裝程序。其實,pip 就是 Python 標准庫(The Python Standard Library)中的一個包,只是這個包比較特殊,用它可以來管理 Python 標准庫(The Python Standard Library)中其他的包。pip 是一個命令行程序。 安裝 pip 後,會向系統添加一個 pip 命令,該命令可以從命令提示符運行。

安裝pip:

  • 安裝python; 這個是必須安裝的;
  • 下載pip:

    官網地址:https://pypi.org/project/pip/#downloads; 下載完畢後,解壓

  • 打開命令行窗口,進入到pip解壓後的目錄;執行代碼

    python3 setup.py install
    進行安裝,
    安裝完成後,將pip加入到系統環境變量中

  • 驗證
    打開命令行窗口,輸入pip list 或者pip3 list

以上只針對於windows系統,其他系統也可以參考;

  • 安裝所需庫:
    打開命令行窗口,輸入執行以下代碼,並回車

    pip install pyftpdlib

    等待提示第三庫安裝成功既可;

啟動FTP服務

pyftpdlib 安裝成功後,在命令行輸入

python3 -m pyftpdlib -p 21

即可啟動一個簡單的ftp服務,不夠默認啟動的ftp服務只有一個無密碼的匿名用戶,如果想添加用戶和權限,需要編碼實現;

編碼實現一個有用戶和權限認證的FTP服務端

def ftpServer(): import pyftpdlib # 該腳本程序是運行在windows上的ftp from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer #實例化虛擬用戶 authorizer = DummyAuthorizer() # 添加用戶權限和路徑 authorizer.add_user('user', '123456', "d:/", perm="elradfmw") # 添加匿名用戶,只需要路徑 authorizer.add_anonymous("d:/") #初始化ftp句柄 handler = FTPHandler handler.authorizer = authorizer #添加被動端口范圍 handler.passive_ports = range(2000,20033) # 監聽ip和端口 server = FTPServer(('0.0.0.0', 21), handler) # 開始服務 server.serve_forever()

運行以上代碼,啟動一個ftp服務;

ftp客戶端

以上在本地啟動了一個ftp服務,測試的時候,可以使用windows自有的ftp客戶端連接測試;

打開命令行窗口,輸入
ftp 127.0.0.1
輸入用戶,密碼
測試結果

另外,python中也內置了ftp客戶端庫 ftplib

使用python中的FTP客戶端

  1. 首先導入FTP

from ftplib import FTP

  1. 實例化FTP對象

ftp = FTP()

  1. 連接ftp,傳入host和端口

ftp.connect(host, port)

  1. 登錄到ftp,使用login方法,傳入用戶密碼

ftp.login(u,p)

  1. 登錄ftp成功,進行文件的上傳和下載操作;

上傳使用storbinary方法:

 buf_size = 1024 file_handler = open(local_file, 'rb') ftp.storbinary('STOR %s' % remote_file, file_handler, buf_size) file_handler.close()

下載使用retrbinary方法

 try: buf_size = 1024 file_handler = open(local_file, 'wb')ftp.retrbinary('RETR %s' % remote_file, file_handler.write, buf_size) file_handler.close() except Exception as err: return

執行完FTP操作後,需要關閉連接

ftp.quit()

以上至實現了ftp的日常操作;關於ftp其他相關操作,可以參考官方文檔;


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved