我使用pysftp模块实现了将一些文件放到FTP站点上的功能。根据0.29版食谱中的建议,我用一个声明打开了连接:
with psyftp.Connection(host=SERVER, port=PORT, username=USER, password=PASS) as ftp:
(我知道使用参数名称的所有大写不是理想的python风格。请不要判断。)运行此结果:
AttributeError: __exit__
对StackOverflow的研究表明,这是因为with
语句需要一个具有__enter__
和__exit__
方法的对象。当您对不包含它们的对象(即不是上下文管理器)使用with
时,会出现此错误。
pysftp是不是真的是一个上下文管理器,尽管它声称,还是有更微妙的事情发生?我可以编程我的例行程序,而不依赖于"使用"声明,我只是想知道这笔交易是什么。
答案 0 :(得分: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)的安全文件传输子系统 与它不兼容的协议。它也不同于 FTP over SSH,这是通过SSH隧道传输FTP的实践 连接。 -FTPS Wikipedia