1

我正在使用 pysftp 模块来实现将一些文件放到 FTP 站点上的功能。按照 0.29 版食谱中的建议,我在 with 语句中打开了连接:

with psyftp.Connection(host=SERVER, port=PORT, username=USER, password=PASS) as ftp:

(我知道对参数名称使用全部大写不是理想的 Python 风格。请不要判断。)运行此结果:

AttributeError: __exit__

对 StackOverflow 的研究表明,发生这种情况是因为该with语句需要一个具有__enter____exit__方法的对象。with当您在不包含它们的对象(即不是上下文管理器)上使用时,您会收到此错误。

pysftp 不是真正的上下文管理器,尽管它声称,还是有更微妙的事情发生?我可以在不依赖“with”语句的情况下编写我的例程,我只是想知道这里的交易是什么。

4

1 回答 1

0

Contextmanager 正在开发当前版本:

import pysftp
with pysftp.Connection(self.server_ip, username=self.username, password=self.password) as sftp:
    for attr in sftp.listdir_attr(remotepath=remote_path):
        print(attr.filename, attr.st_size, sftp.isdir(remote_path + "/" + attr.filename))

注意:PYSFPT != FTP,如果您想连接到 FTP 服务器,请使用 ftplib

from ftplib import FTP
with FTP("ftp1.at.proftpd.org") as ftp:
    #do your stuff here

SFTP = SSH 文件传输协议,FTP = 文件传输协议

FTPS(也称为 FTPES、FTP-SSL 和 FTP Secure)是常用文件传输协议 (FTP) 的扩展,增加了对传输层安全性 (TLS) 和以前的安全套接字层 (SSL) 的支持,现在被 RFC7568 禁止)加密协议。

FTPS 不应与 SSH 文件传输协议 (SFTP) 混淆,后者是不兼容的安全外壳 (SSH) 协议的安全文件传输子系统。它也与 SSH 上的 FTP 不同,后者是通过 SSH 连接对 FTP 进行隧道传输的做法。- FTPS 维基百科

于 2019-08-29T07:32:17.587 回答