亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python:pysftp 異常處理

Python:pysftp 異常處理

鳳凰求蠱 2022-10-11 21:37:57
我正在使用 pysftp 和 Python 3.7 來設置 SFTP 客戶端腳本。我的代碼(簡化和最小化):import pysftpimport sys# Variablesdestination_dir = 'BOGUS_DIR'server = 'myserver.mydomain.com'user = 'my_user'key = 'my_key'port = 22# cnoptsmycnopts = pysftp.CnOpts()mycnopts.log = Truemycnopts.compression = Truemycnopts.ciphers = Nonemycnopts.hostkeys = Nonetry:    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 嗎?
查看完整描述

2 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

好吧,我想通了。


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沒有做任何事情,實際上沒有對它做任何事情。


查看完整回答
反對 回復 2022-10-11
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

如果目錄不存在,您會從嘗試運行命令的遠程 shell 收到錯誤。在此代碼中,您試圖捕獲只能由sftpsftp也許,您應該在每個執行的 shell 命令后檢查模塊應返回的狀態碼



查看完整回答
反對 回復 2022-10-11
  • 2 回答
  • 0 關注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號