python - 使用pyftpdlib进行文件传输

1 投票
1 回答
5457 浏览
提问于 2025-04-18 12:35

我正在用Python做文件传输的工作。我搜索了很多资料,但还是没找到一个简单的示例,能展示如何用pyftpdlib搭建一个能工作的FTP客户端和服务器。我觉得这个库很有用,但不知道该怎么开始使用。

非常感谢任何帮助!

编辑:
好的,我按照教程进行了操作。我的目标是先在本地机器上能够发送和接收文件。

我运行了basic_ftpd.py,得到了这个:

[I 14-07-09 15:08:27] >>> starting FTP server on 127.0.0.1:2121, pid=7000 <<<
[I 14-07-09 15:08:27] poller: <class 'pyftpdlib.ioloop.Select'>
[I 14-07-09 15:08:27] masquerade (NAT) address: None
[I 14-07-09 15:08:27] passive ports: None

然后我运行winnt_ftpd.py,出现了错误:

Traceback (most recent call last):
  File "***\lib\winnt_ftpd.py", line 41, in <module>
    from pyftpdlib.authorizers import WindowsAuthorizer
ImportError: cannot import name WindowsAuthorizer

假设我想发送C:/share里的某个文件,在本地地址我认为应该是127.0.0.1:2121或者localhost:2121。然后在客户端那边,我想获取目录列表:

import ftplib

ftp = ftplib.FTP("127.0.0.1:2121")
ftp.login("user", "12345")

data = []

ftp.dir(data.append)

ftp.quit()

for line in data:
    print "-", line

但是这不行,我得到了以下错误:

Traceback (most recent call last):
  File "C:\Users\***\src\client1.py", line 8, in <module>
    ftp = ftplib.FTP("127.0.0.1:2121")
  File "C:\Python27\lib\ftplib.py", line 117, in __init__
    self.connect(host)
  File "C:\Python27\lib\ftplib.py", line 132, in connect
    self.sock = socket.create_connection((self.host, self.port), self.timeout)
  File "C:\Python27\lib\socket.py", line 551, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 11004] getaddrinfo failed

编辑:
我把

ftp = ftplib.FTP("127.0.0.1:2121")

改成了

ftp = ftplib.FTP("127.0.0.1")

然后我得到了这个错误:

socket.error: [Errno 10061] No connection could be made because the target machine actively refused it

有什么建议吗?

1 个回答

1

你可以试试这个:

conn = ftplib.FTP() conn.connect('127.0.0.1', 2121) conn.login('user','12345')

这里的FTP()是一个创建连接的工具,它只需要主机名或者IP地址。如果你不传任何东西,然后用connect()来设置连接,你可以传一个包含(IP,端口)的组合。这应该能解决问题。

撰写回答