假設我有第三方庫,我不允許修改。假設它被稱爲織物,但這只是解釋症狀的重要。交換功能實現不起作用
該腳本處理現有文件的列表,以使用fabric.operations.get
來獲取它們,依次調用fabric.sftp.SFTP.get
。使用fabric.sftp.SFTP.get
產生了一些Warning: get() encountered an exception while downloading ... Underlying exception: Permission denied
。我注意到的落實是太陳舊了,交換該函數的一個使用sudo來工作Permission denied
圍繞實現:
import fabric.sftp
def sftpget(....same args as in current implementation....):
...here I pasted fabric.sftp.SFTP.get from the Internet
# swapping the implementation
fabric.sftp.SFTP.get=sftpget
這個工作的情況下的99.999%。但是獲取三個文件仍然會導致相同的錯誤。我試圖看看是否是由其他代碼路徑引起的,但打印該字符串的唯一地方是中的except:
子句(對get() encountered an exception while downloading
爲grepped /usr/lib/python2.6/site-packages/
)。我嘗試將該函數交換爲將打印異常的堆棧跟蹤的實現,但我仍然只獲取Permission denied
消息,而沒有堆棧跟蹤。
看起來這個函數在這種情況下不會被交換。
有些調用使用原始fabric.operations.get
的原因是什麼(因爲我沒有看到打印的堆棧軌跡)(可能還有未修補的fabric.sftp.SFTP.get
,因爲它似乎沒有使用sudo修復程序 - 我沒有手動檢查那些操作可以在這些文件上完成)?在導入過程中
如何找到罪魁禍首? – 2014-09-25 13:57:12
可能隱藏得很好,可能很容易通過查找代碼「SFTP.get」 – 2014-09-26 09:09:00