web-dev-qa-db-ja.com

pythonにある1行のFTPサーバー

pythonに単純なftpサーバーを実行する1行のコマンドを含めることは可能ですか? FTPサーバーをインストールすることなく、Linuxボックスにファイルを転送するための迅速かつ一時的な方法として、これを実行できるようにしたいと思います。できれば、組み込みのpythonライブラリを使用する方法で、余分なインストールは必要ありません。

90
zio

必須 ツイスト 例:

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.
122
Ali Afshar

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

コマンドラインから:

python -m pyftpdlib

または、「my_server.py」:

#!/usr/bin/env python

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サイトにさらに例があります。

コマンドラインオプションのリストを取得するには:

python -m pyftpdlib --help

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

80
Brian Bruggeman

代わりに1行HTTPサーバーを使用しないのはなぜですか?

python -m SimpleHTTPServer 8000

ポート8000​​でHTTP経由で現在の作業ディレクトリのコンテンツを提供します。

Python 3を使用する場合は、代わりに書く必要があります

python3 -m http.server 8000

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

ところで、どちらの場合も、portパラメーターはオプションです。

35

上記の答えはすべて、Pythonディストリビューションが「1ライナーpython ftpd」の目標を達成するためにサードパーティライブラリを持っていることを前提としていましたが、それは@ツィオは尋ねていました。また、SimpleHTTPServerはファイルをダウンロードするためのWebブラウザを必要としますが、十分に高速ではありません。

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

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の両側が自動的に終了し、ジョブが完了します。

24
Meow

Pyftpdlibユーザーの場合。これはpyftpdlibウェブサイトで見つけました。これにより、ファイルシステムへの書き込みアクセス権を持つ匿名FTPが作成されるため、十分に注意して使用してください。セキュリティを強化するために、より多くの機能がボンネットの下で利用できるので、見てください:

Sudo pip install pyftpdlib

python -m pyftpdlib -w

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

Sudo python -m pyftpdlib.ftpserver

15
cdplayer

インストール:

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/

3
Jonathan

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

apt-get install python-pyftpdlib

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

python -m pyftpdlib -p 21 
2
MVnD3X

1行のFTPサーバーについては知りませんが、

python -m SimpleHTTPServer

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

1
Alex

のツールの良いリスト

http://www.willdonnelly.net/blog/file-transfer/

私は何度も自分でwoofを使用しました。非常に素晴らしい。

0
Joe Drumgoole