Cia*_*ian 6 python sftp paramiko python-2.7
我使用的是通过SFTP上传文件的paramiko用sftp.put(localFile, remoteFile).如果需要,我首先制作必要的目录
makeCommand = 'mkdir -p "' + remotePath + '"'
ssh.exec_command(makeCommand)
Run Code Online (Sandbox Code Playgroud)
这有时是有效的,但我偶尔会收到以下错误:
sftp.put(localFile, remoteFile)
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 565, in put
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 245, in open
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 635, in _request
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 682, in _read_response
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 708, in _convert_status
IOError: [Errno 2] No such file
Run Code Online (Sandbox Code Playgroud)
尽管本地文件肯定存在(并且localFile是正确的路径)并且建立了远程路径.这里和这里有一个类似问题的讨论,但那里提到的任何一点都没有帮助我.我的服务器支持该df -hi命令.有没有人对此或任何可能的解决方案有任何建议?
编辑
在下面的建议后,我尝试更改工作目录,sftp.chdir(remoteDirectory)但此调用产生了与上面完全相同的错误.所以这似乎不仅仅是一个上传问题.有任何想法吗?
put 方法有一个默认启用的确认参数,它将在传输后对文件进行统计。
在我的情况下,我将文件传输到的远程服务器立即将任何传输的文件移动到另一个位置以进行处理,这导致统计失败。将确认参数设置为 False 解决了这个问题。
def put(self, localpath, remotepath, callback=None, confirm=True):
Run Code Online (Sandbox Code Playgroud)
来自 paramiko 源 sftp_client.py:
:param bool confirm: 之后是否对文件执行 stat() 以确认文件大小(自 1.7.7 起)
| 归档时间: |
|
| 查看次数: |
14361 次 |
| 最近记录: |