Python:pysftp 异常处理

我正在使用 pysftp 和 Python 3.7 来设置 SFTP 客户端脚本。


我的代码(简化和最小化):


import pysftp

import sys


# Variables

destination_dir = 'BOGUS_DIR'

server = 'myserver.mydomain.com'

user = 'my_user'

key = 'my_key'

port = 22


# cnopts

mycnopts = pysftp.CnOpts()

mycnopts.log = True

mycnopts.compression = True

mycnopts.ciphers = None

mycnopts.hostkeys = None


try:

    with pysftp.Connection(server, username=user, private_key=key, port=port, cnopts=mycnopts) as sftp:

        try:

            with sftp.cd(destination_dir):

                print("OK cd worked")

        except:

            print("NOT OK cd failed")

            e = sys.exc_info()

            print("Exception: {0}".format(e))


        if sftp.isdir(destination_dir):

            print("OK isdir")

        else:

            print("NOT OK isdir")


except:

    print("Connection failure.")

    e = sys.exc_info()

    print("Exception: {0}".format(e))

输出是:OK cd 工作


BOGUS_DIR但我知道一个不存在的事实。就像 pysftp 没有引发异常cd(),或者我抓错了(因此我的 python 代码没有正确完成)。


同样isdir(),无论我作为参数输入什么,True即使目录不存在,它也总是返回。


如果我因错误而更改连接参数,我会捕获连接失败异常。


pyftp 处理异常是错误的,还是我的代码有问题?我应该不信任 pysftp 并直接使用 Paramiko 吗?


凤凰求蛊
浏览 182回答 2
2回答

慕尼黑的夜晚无繁华

好吧,我想通了。sftp.cd()如果目录不存在,则不会引发异常。只有对坏目录的操作才可以。因此,如果我像这样修改我的代码:....    try:        with sftp.cd(destination_dir):            sftp.listdir()            print("OK ce worked")    except:        print("NOT OK cd failed")        e = sys.exc_info()        print("Exception: {0}".format(e))  ....这样我得到一个异常,因为sftp.listdir()无法使用不存在的目录。除了设置当前目录的值之外,几乎sftp.cd没有做任何事情,实际上没有对它做任何事情。

翻翻过去那场雪

如果目录不存在,您会从尝试运行命令的远程 shell 收到错误。在此代码中,您试图捕获只能由sftp. sftp也许,您应该在每个执行的 shell 命令后检查模块应返回的状态码
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python