我正在使用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“语句的情况下编写我的例程,我只是想知道这是怎么回事。
发布于 2019-08-29 15:32:18
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))注意:
ftplib!= FTP,如果你想连接到FTP服务器,请使用FTP
from ftplib import FTP
with FTP("ftp1.at.proftpd.org") as ftp:
#do your stuff hereSFTP = SSH文件传输协议,FTP =文件传输协议
FTPS (也称为
、FTPS和FTP Secure)是对常用文件传输协议的扩展,它添加了对传输层安全性(TLS)和以前的安全套接字层(安全套接字层,现在被RFC7568禁止)加密协议的支持。
不应将FTPS与SSH文件传输协议(SFTP)混淆,后者是安全外壳(SSH)协议的安全文件传输子系统,与它不兼容。它也不同于基于SSH的FTP,后者是通过SSH连接通过隧道传输FTP的实践。-- FTPS Wikipedia
https://stackoverflow.com/questions/27627583
复制相似问题