使用Python/Paramiko写文件时的SFTP错误
我正在尝试写一个小的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 个回答
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)
所以我很确定它需要的是文件名,而不是文件本身。