python中的一行ftp服务器

zio*_*zio 93 python ftp ftp-server

是否可以在python中使用一行命令来执行简单的ftp服务器?我希望能够以快速和临时的方式将文件传输到Linux机器而无需安装ftp服务器.最好是使用内置python库的方式,这样就没有什么额外的安装了.

Ali*_*har 123

强制扭曲的例子:

twistd -n ftp
Run Code Online (Sandbox Code Playgroud)

并且可能有用:

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.
Run Code Online (Sandbox Code Playgroud)

  • 是的,我确实值得投票,但实际上,人们应该知道Twisted.当然,Twisted是许多Linux的基础安装. (16认同)
  • 你不应该投票,用户说"最好",而不是"必要".使用python内置库无法做到这一点,你必须安装第三方软件. (5认同)
  • @Andrea Spadaccini:来自未来的人们.我们发现这个答案非常有用.;) (4认同)
  • 非常好!但是OP要求使用标准的python库,因为他不想安装其他库. (3认同)
  • 我没有投反对票,因为这是一个很好的答案,即使有点 O,而且未来的人们在搜索类似问题时会发现它很有用。 (2认同)
  • 在大多数平台上,twisted 安装就像`pip install -U twined`一样简单,链接站点上没有直接提到。 (2认同)

Bri*_*man 84

退房pyftpdlib从詹Rodola.它是python中最好的ftp服务器之一.它用于google的chrome(他们的浏览器)和bazaar(版本控制系统).它是Python上最完整的RFC-959(又名:FTP服务器实现规范)实现.

从命令行:

python -m pyftpdlib
Run Code Online (Sandbox Code Playgroud)

或者'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()
Run Code Online (Sandbox Code Playgroud)

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

要获取命令行选项列表:

python -m pyftpdlib --help
Run Code Online (Sandbox Code Playgroud)

注意,如果要覆盖或使用标准ftp端口,则需要管理员权限(例如sudo).

  • 更新于2014年8月27日当前版本.现在不应该有弃用警告. (2认同)

And*_*ini 37

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

python -m SimpleHTTPServer 8000
Run Code Online (Sandbox Code Playgroud)

将在端口8000上通过HTTP提供当前工作目录的内容.

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

python3 -m http.server 8000
Run Code Online (Sandbox Code Playgroud)

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

顺便说一句,在这两种情况下,port参数都是可选的.

  • 我认为这不允许他上传文件. (28认同)
  • 问题是关于设置 FTP 服务器,而不是 HTTP。 (3认同)
  • 没有简历,单次连接等。 (2认同)

Meo*_*eow 25

上面的答案都假设你的Python发行版会有一些第三方库来实现"one liner python ftpd"目标,但这并不是@zio所要求的.此外,SimpleHTTPServer涉及用于下载文件的web broswer,它不够快.

Python不能做本身ftpd时,但你可以使用的netcat,nc:

nc基本上是来自任何类UNIX系统(甚至是嵌入式系统)的内置工具,因此它非常适合" 快速和临时的文件传输方式 ".

步骤1,在接收方,运行:

nc -l 12345 | tar -xf -
Run Code Online (Sandbox Code Playgroud)

这将侦听端口12345,等待数据.

第2步,发件人方:

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345
Run Code Online (Sandbox Code Playgroud)

您也可以放在pv中间监控转移进度:

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345
Run Code Online (Sandbox Code Playgroud)

转移完成后,双方nc将自动退出,完成工作.

  • 说到假设... 你假设客户端将是具有 `tar` 和 `nc` 可用的 unix 机器。如果是窗户呢? (4认同)

cdp*_*yer 15

对于pyftpdlib用户.我在pyftpdlib网站上找到了这个.这会创建一个匿名的ftp,对您的文件系统具有写入权限,因此请谨慎使用.引擎盖下有更多功能可以提高安全性,所以请看看:

sudo pip install pyftpdlib

python -m pyftpdlib -w
Run Code Online (Sandbox Code Playgroud)

对于尝试使用上述弃用方法的人可能会有所帮助.

sudo python -m pyftpdlib.ftpserver

  • 如果你安装在venv中,你可以跳过`sudo` (3认同)

Sha*_*sal 6

apt-get install python3-pip

pip3 install pyftpdlib

python3 -m pyftpdlib -p 21 -w --user=username --password=password

-w = write permission

-p = desired port

--user = give your username

--password = give your password
Run Code Online (Sandbox Code Playgroud)