使用Python/Paramiko写文件时的SFTP错误

0 投票
1 回答
1771 浏览
提问于 2025-04-17 08:40

我正在尝试写一个小的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)

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

撰写回答