pysftp是否真的具有上下文感知能力?

时间:2014-12-23 20:31:26

标签: python ftp contextmanager pysftp

我使用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是不是真的是一个上下文管理器,尽管它声称,还是有更微妙的事情发生?我可以编程我的例行程序,而不依赖于"使用"声明,我只是想知道这笔交易是什么。

1 个答案:

答案 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