Python中的一行ftp服务器

是否有可能在Python中有一个单行命令做一个简单的FTP服务器? 我希望能够做到这一点,快速和临时的方式来传输文件到Linux的盒子,而无需安装一个FTP服务器。 最好是使用内置的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服务器之一。 它用于谷歌的铬(他们的浏览器)和集市(版本控制系统)。 这是RFC-959 (又名:FTP服务器实现规范)上最完整的Python实现。

从命令行:

 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() 

如果你想要更复杂的东西,网站上有更多的例子。

获取命令行选项列表:

 python -m pyftpdlib --help 

请注意,如果你想覆盖或使用标准的FTP端口,你需要pipe理员权限(如sudo)。

你为什么不使用单线HTTP服务器?

 python -m SimpleHTTPServer 8000 

将通过端口8000上的HTTP服务当前工作目录的内容。

如果你使用Python 3,你应该写

 python3 -m http.server 8000 

请参阅2.x的SimpleHTTPServer模块文档和3.x的http.server文档。

顺便说一句,在这两种情况下,端口参数是可选的。

上面的答案都假设你的Python发行版会有一些第三方库来实现“单行Python python ftpd”的目标,但是@zio所要求的并不是这样,SimpleHTTPServer也涉及到web下载器的下载文件,它不够快。

Python本身不能做ftpd,但是你可以使用nc

nc (netcat)基本上是来自任何类UNIX系统(甚至是embedded式系统)的内置工具,所以它是“ 快速和临时的文件传输方式 ”的完美之处。

步骤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网站上find了这个。 这创build了一个匿名的ftp,可以写入文件系统,所以请谨慎使用。 更多的function可以在引擎盖下获得更好的安全性,所以只要看看:

 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() 

深入:

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

好的工具清单

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

我多次使用woof。 非常好。

我不知道一个单线FTP服务器,但如果你这样做

 python -m SimpleHTTPServer 

它将在0.0.0.0:8000上运行HTTP服务器,从当前目录中提供文件。 如果你正在寻找一种方法来快速从一个网页浏览器的Linux的文件夹,你不能击败它。