Python での 1 行の FTP サーバー
FTP は File Transfer Protocol の略です。 これにより、コンピューター ネットワークを介してクライアントとサーバー間でファイルを転送できます。
Python ライブラリには pyftpdlib
モジュールが含まれており、効率的でスケーラブルな FTP サーバーを Python で作成できます。 このチュートリアルでは、Python でワンライナーを使用して FTP サーバーを作成する方法を説明します。
pyftpdlib
を使用して Python で 1 行の FTP サーバーを作成する
まず、pyftpdlib
モジュールをインストールする必要があります。
pip install pyftpdlib
出力:
Successfully built pyftpdlib
Installing collected packages: pyftpdlib
Successfully installed pyftpdlib-1.5.6
その後、ターミナルで pyftpdlib
コマンドを実行できます。 たとえば、次のコマンドは、現在のディレクトリで FTP サーバーを起動します。
python -m pyftpdlib
出力:
[I 2022-09-20 21:36:36] concurrency model: async
[I 2022-09-20 21:36:36] masquerade (NAT) address: None
[I 2022-09-20 21:36:36] passive ports: None
[I 2022-09-20 21:36:36] >>> starting FTP server on 0.0.0.0:2121, pid=3492 <<<
次に、サーバーが稼働しているかどうかを確認します。
curl ftp://127.0.0.1:2121
次のように、現在のディレクトリのすべてのコンテンツが一覧表示されます。
出力:
-rw-rw-rw- 1 owner group 6817 May 20 06:55 -1.14-windows.xml
drwxrwxrwx 1 owner group 0 Nov 13 2021 .Icecream Screen Recorder
drwxrwxrwx 1 owner group 4096 Mar 28 02:51 .THypervBox
drwxrwxrwx 1 owner group 12288 Sep 18 14:46 .VirtualBox
drwxrwxrwx 1 owner group 4096 May 15 07:36 .android
デフォルトのモードは読み取り専用です。 -w
オプションを使用して、書き込みアクセスを有効にできます。 -d
フラグを使用すると、別のディレクトリを使用してサーバーで共有できます。
次の例では、ディレクトリ C:\pc\test_folder
にログイン ユーザーの書き込みアクセス権を提供します。
python -m pyftpdlib -w -d C:\pc\test_folder
出力:
[I 2022-09-22 19:55:47] concurrency model: async
[I 2022-09-22 19:55:47] masquerade (NAT) address: None
[I 2022-09-22 19:55:47] passive ports: None
[I 2022-09-22 19:55:47] >>> starting FTP server on 0.0.0.0:2121, pid=25560 <<<
実行されているかどうかを確認します。
curl ftp://127.0.0.1:2121
出力:
drwxrwxrwx 1 owner group 0 Feb 23 2022 New folder
-rw-rw-rw- 1 owner group 0 Feb 23 2022 books.txt
-rw-rw-rw- 1 owner group 18 Jun 09 15:58 hello.txt
匿名ログインを無効にするには、サーバーを起動する前に username
と password
を指定する必要があります。
-u
オプションを使用すると、username
を設定できます。-P
オプションを使用すると、FTP サーバーにログインするための password
を設定できます。
python -m pyftpdlib -w -d C:\pc\test_folder -u username -P password
出力:
[I 2022-09-23 00:16:12] concurrency model: async
[I 2022-09-23 00:16:12] masquerade (NAT) address: None
[I 2022-09-23 00:16:12] passive ports: None
[I 2022-09-23 00:16:12] >>> starting FTP server on 0.0.0.0:2121, pid=22732 <<<
このコマンドを実行して、共有ディレクトリを一覧表示します。
curl --user username:password ftp://127.0.0.1:2121/
出力:
drwxrwxrwx 1 owner group 0 Feb 23 2022 New folder
-rw-rw-rw- 1 owner group 0 Feb 23 2022 books.txt
-rw-rw-rw- 1 owner group 18 Jun 09 15:58 hello.txt
その他のコマンド オプションについては、help コマンドを実行してください。
python -m pyftpdlib --help