Python / Paramiko编写文件时出现SFTP错误

时间:2011-12-20 00:42:18

标签: python sftp paramiko

我正在尝试编写一个小的Python脚本,它将从数据库中获取查询结果,将它们写入文件,然后将文件sftp到另一台服务器。这些部分工作得很好,但是在写完文件后立即尝试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 个答案:

答案 0 :(得分:1)

错误消息告诉你它(在这种情况下,os.stat)想要一个类似字符串的对象,而你正在给它文件。

在我的paramiko副本中查看sftp_client.py的来源,我们看到了

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)

所以我很确定它需要文件名,而不是文件本身。