我正在尝试编写一个小的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()
,因此看起来该文件应该是,关闭并在此之后可用。有人能告诉我我做错了什么吗?我可以发布更多的代码,如果这将有所帮助。非常感谢你。
答案 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)
所以我很确定它需要文件名,而不是文件本身。