0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ftplibをPC1台で試す

Posted at

はじめに

PC1台でftplibの動作を確認したときのメモです。
dockerを使用してFTPサーバを作成し、ローカルのディレクトリとdockerコンテナ内のディレクトリでファイルのやり取りをすることを目的とします。

環境

  • MacBook Pro
    • プロセッサ:1.4 GHz クアッドコアIntel Core i5
    • メモリ:16 GB

dockerの準備

作業用のディレクトリを作成し、その中にdocker-compose.ymlを作成する。下記のサイトを参考に作成する。
https://github.com/stilliard/docker-pure-ftpd/tree/master

version: '3'

services:
  ftpd_server:
    image: stilliard/pure-ftpd
    container_name: pure-ftpd
    ports:
      - "21:21"
      - "30000-30009:30000-30009"

    environment:
      PUBLICHOST: "localhost"
      FTP_USER_NAME: testuser
      FTP_USER_PASS: password
      FTP_USER_HOME: /home/testuser

    restart: always

送信するファイルなどの準備

送信するファイルなどを準備する。

ローカルPC

ftp-testというディレクトリを作成し、この中に必要なファイルを作成する。

ftp-test ____ docker-compose.yml
          |__ put-test.txt

dockerコンテナ

/home/testuser下に必要なファイルを作成する。

testuser ___ get-test.txt

ftplibの動作確認

下記コマンドでdockerコンテナの作成&起動を行う。

cd ftp-test
docker compose up -d

接続

pythonで下記を実行し、ホストに接続
パラメータはdocker-compose.ymlに設定したもの

from ftplib import FTP
ftp = FTP(host='localhost', user='testuser', passwd='password')

ディレクトリの中身を取得

下記コマンドを実行すると、コンテナの/home/testuserディレクトリ下のファイルやフォルダを見ることができる。

ftp.retrlines('LIST')
-rw-r--r--    1 0          0                   9 Nov 28 14:02 get-test.txt
'226-Options: -l \n226 1 matches total'

コンテナにあるファイルをPCにコピー

下記コマンドを実行すると、コンテナにあるget-test.txtをPCのftp-test下にget-test2.txtとして保存することができる。

with open('get-test2.txt', 'wb') as f:
    ftp.retrbinary('RETR get-test.txt', f.write)
'226-File successfully transferred\n226 0.000 seconds (measured here), 42.03 Kbytes per second'

PCにあるファイルをコンテナにコピー

下記コマンドを実行すると、PCにあるput-test.txtをコンテナの/home/testuser下にput-test2.txtとして保存することができる。

with open('put-test.txt', 'rb') as f:
    ftp.storbinary('STOR put-test2.txt', f)
'226-File successfully transferred\n226 0.001 seconds (measured here), 8.00 Kbytes per second'

ftp.retrlines('LIST')を実行すると、コンテナ内にput-test2.txtとして保存されていることを確認することができる。

ftp.retrlines('LIST')
-rw-r--r--    1 0          0                   9 Nov 28 14:02 get-test.txt
-rw-r--r--    1 1000       ftpgroup            8 Nov 28 14:24 put-test2.txt
'226-Options: -l \n226 2 matches total'

dockerの停止

下記コマンドでコンテナの停止&イメージの削除を行う。

docker compose down --rmi all

おわりに

手元にあるPCで完結できてよかったです。
公式ドキュメントにもっと使用例とか載せて欲しい。。。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?