pythonに単純なftpサーバーを実行する1行のコマンドを含めることは可能ですか? FTPサーバーをインストールすることなく、Linuxボックスにファイルを転送するための迅速かつ一時的な方法として、これを実行できるようにしたいと思います。できれば、組み込みのpythonライブラリを使用する方法で、余分なインストールは必要ありません。
必須 ツイスト 例:
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.
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など)が必要になることに注意してください。
代わりに1行HTTPサーバーを使用しないのはなぜですか?
python -m SimpleHTTPServer 8000
ポート8000でHTTP経由で現在の作業ディレクトリのコンテンツを提供します。
Python 3を使用する場合は、代わりに書く必要があります
python3 -m http.server 8000
2.xの場合は SimpleHTTPServer モジュールのドキュメントを、3.xの場合は http.server のドキュメントを参照してください。
ところで、どちらの場合も、portパラメーターはオプションです。
上記の答えはすべて、Pythonディストリビューションが「1ライナーpython ftpd」の目標を達成するためにサードパーティライブラリを持っていることを前提としていましたが、それは@ツィオは尋ねていました。また、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
の両側が自動的に終了し、ジョブが完了します。
Pyftpdlibユーザーの場合。これはpyftpdlibウェブサイトで見つけました。これにより、ファイルシステムへの書き込みアクセス権を持つ匿名FTPが作成されるため、十分に注意して使用してください。セキュリティを強化するために、より多くの機能がボンネットの下で利用できるので、見てください:
Sudo pip install pyftpdlib
python -m pyftpdlib -w
上記の非推奨の方法を使用しようとした人には役立つかもしれません。
Sudo python -m pyftpdlib.ftpserver
インストール:
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()
深くなる:
より簡単な解決策は、ユーザーpyftpdライブラリになります。このライブラリを使用すると、Python FTPサーバーを1行でスピンできます。ただし、デフォルトではインストールされませんが、単純なaptコマンドを使用してインストールできます
apt-get install python-pyftpdlib
今、あなたが提供したいディレクトリから、pythodモジュールを実行するだけです
python -m pyftpdlib -p 21
1行のFTPサーバーについては知りませんが、
python -m SimpleHTTPServer
0.0.0.0:8000でHTTPサーバーを実行し、現在のディレクトリからファイルを提供します。 Webブラウザーを使用してLinuxボックスからファイルをすばやく取得する方法を探しているなら、それを打ち負かすことはできません。