2011-12-20 72 views
0

我正在嘗試編寫一個小型Python腳本,它將從數據庫中獲取查詢結果,將它們寫入文件,然後將該文件sftp到不同的服務器。這些部分工作得很好,但在寫入文件後立即嘗試sftp文件時出現奇怪的錯誤。Python/Paramiko寫入文件時出現SFTP錯誤

我得到的錯誤是

File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 558, in put 
file_size = os.stat(localpath).st_size 
TypeError: coercing to Unicode: need string or buffer, file found 

問題的代碼行只是

sftp.put(outputfile, sftpoutputfile) 

我使用輸出文件,而不是多數民衆贊成被寫在一個副本嘗試腳本並且完全按照它應該的那樣工作。在寫入文件之後(並在設置sftp之前),我打電話給file.close(),這樣看起來該文件應該在此之後關閉並可用。有人能告訴我我做錯了什麼嗎?如果這會有所幫助,我可以發佈更多的代碼。非常感謝你。

回答

1

錯誤消息告訴你它(在這種情況下,os.stat)需要一個類似字符串的對象,而你正在給它的文件。

望着sftp_client.py在我的paramiko的複製來源,我們看到

def put(self, localpath, remotepath, callback=None, confirm=True): 
    [...] 
    file_size = os.stat(localpath).st_size 
    fl = file(localpath, 'rb') 
    try: 
     fr = self.file(remotepath, 'wb') 
     fr.set_pipelined(True) 

,所以我敢肯定它想要的文件名,而不是文件本身。

+0

啊,我明白了 - 寫信給它使其成爲一個文件而不是一個字符串。我一直在做太多的PHP。非常感謝您的快速響應。 – moexu 2011-12-20 00:58:30