122

シンプルなftpサーバーを実行するために、Pythonで1行のコマンドを使用することは可能ですか? FTP サーバーをインストールせずにファイルを Linux ボックスに転送するための迅速かつ一時的な方法として、これを実行できるようにしたいと考えています。組み込みの Python ライブラリを使用する方法が望ましいので、追加でインストールする必要はありません。

4

9 に答える 9

149

義務的なTwisted の例:

twistd -n ftp

そしておそらく便利です:

twistd ftp --help

Usage: twistd [options] ftp [options].
WARNING: This FTP server is probably INSECURE do not use it.
Options:
  -p, --port=           set the port number [default: 2121]
  -r, --root=           define the root of the ftp-site. [default:
                    /usr/local/ftp]
  --userAnonymous=  Name of the anonymous user. [default: anonymous]
  --password-file=  username:password-style credentials database
  --version         
  --help            Display this help and exit.
于 2011-02-14T16:57:14.810 に答える
112

Giampaolo Rodola のpyftpdlibをチェックしてください。これは、Python 用の最高の ftp サーバーの 1 つです。Google の chromium (ブラウザ) と bazaar (バージョン管理システム) で使用されています。RFC-959 (別名: FTP サーバー実装仕様)のPython での最も完全な実装です。

インストールするには:

pip3 install pyftpdlib

コマンドラインから:

python3 -m pyftpdlib

または「my_server.py」:

#!/usr/bin/env python3

from pyftpdlib import servers
from pyftpdlib.handlers import FTPHandler
address = ("0.0.0.0", 21)  # listen on every IP on my machine on port 21
server = servers.FTPServer(address, FTPHandler)
server.serve_forever()

より複雑なものが必要な場合は、Web サイトにさらに例があります。

コマンド ライン オプションのリストを取得するには、次のようにします。

python3 -m pyftpdlib --help

標準の ftp ポートを上書きまたは使用する場合は、管理者権限 (sudo など) が必要になることに注意してください。

于 2011-09-05T03:46:22.060 に答える
47

代わりに1行のHTTPサーバーを使用してみませんか?

python -m SimpleHTTPServer 8000

ポート8000​​でHTTPを介して現在の作業ディレクトリの内容を提供します。

Python 3を使用する場合は、代わりに次のように記述してください。

python3 -m http.server 8000

2.xのSimpleHTTPServerモジュールのドキュメントと3.xのhttp.serverのドキュメントを参照してください。

ちなみに、どちらの場合もポートパラメータはオプションです。

于 2011-02-14T16:45:31.663 に答える
30

上記の回答はすべて、「ワンライナーpython ftpd」の目標を達成するために、Pythonディストリビューションにサードパーティのライブラリがいくつかあることを前提としていましたが、@zioが求めていたのはそうではありません. また、SimpleHTTPServer には、ファイルをダウンロードするための Web ブラウザーが含まれており、十分に高速ではありません。

Python はそれ自体で ftpd を実行できませんが、netcatを使用できncます。

nc基本的に、UNIX ライクなシステム (組み込みシステムも含む) の組み込みツールであるため、「ファイルをすばやく一時的に転送する方法」に最適です。

ステップ 1 の受信側で、次のコマンドを実行します。

nc -l 12345 | tar -xf -

これはポート 12345 でリッスンし、データを待ちます。

ステップ 2、送信者側:

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345

pv途中で転送の進行状況を監視することもできます。

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345

転送が完了すると、 の両側がnc自動的に終了し、ジョブが完了します。

于 2014-12-06T12:15:46.760 に答える
22

pyftpdlib ユーザー向け。これは pyftpdlib Web サイトで見つけました。これにより、ファイルシステムへの書き込みアクセス権を持つ匿名 ftp が作成されるため、十分に注意して使用してください。セキュリティを強化するために、内部でさらに多くの機能を利用できます。

sudo pip3 install pyftpdlib

python3 -m pyftpdlib -w  

## updated for python3 Feb14:2020

上記の非推奨の方法を使用しようとした人にとっては役立つかもしれません。

sudo python -m pyftpdlib.ftpserver

于 2014-06-01T06:13:33.987 に答える
4

より簡単な解決策は、pyftpd ライブラリを使用することです。このライブラリを使用すると、Python FTP サーバーを 1 行でスピンできます。ただし、デフォルトではインストールされませんが、単純な apt コマンドを使用してインストールできます

apt-get install python-pyftpdlib

提供したいディレクトリから pythod モジュールを実行するだけです

python -m pyftpdlib -p 21 
于 2018-05-13T06:45:57.823 に答える
3

インストール:

pip install twisted

次にコード:

from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor

reactor.listenTCP(21, FTPFactory(Portal(FTPRealm('./'), [AllowAnonymousAccess()])))
reactor.run()

深くなる:

http://twistedmatrix.com/documents/current/core/examples/

于 2014-12-11T20:07:51.020 に答える
0

1行のFTPサーバーについてはわかりませんが、知っている場合は

python -m SimpleHTTPServer

0.0.0.0:8000でHTTPサーバーを実行し、現在のディレクトリからファイルを提供します。Webブラウザを使用してLinuxボックスからファイルをすばやく取得する方法を探しているなら、それを打ち負かすことはできません。

于 2011-02-14T16:44:49.113 に答える