我正在使用带有 sftp.put(localFile, remoteFile)
的 Paramiko 通过 SFTP 上传文件。如果需要,我首先制作必要的目录
makeCommand = 'mkdir -p "' + remotePath + '"'
ssh.exec_command(makeCommand)
这有时是有效的,但我偶尔会收到以下错误:
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
尽管本地文件肯定存在(并且 localFile
是它的正确路径)并且创建了远程路径。 这里 和 这里 都有关于类似问题的讨论,但那里提出的所有观点都没有帮助我。我的服务器支持 df -hi
命令。有没有人对此或可能的解决方案有任何建议?
编辑
根据以下建议,我尝试使用 sftp.chdir(remoteDirectory)
更改工作目录,但此调用产生了与上述完全相同的错误。所以这似乎不仅仅是一个上传问题。有任何想法吗?
原文由 Cian 发布,翻译遵循 CC BY-SA 4.0 许可协议
这似乎是一个远程文件夹权限问题。尽管远程文件夹是在文件上传之前创建的,但该文件夹的权限似乎阻止了上传。
问题与 此 问题有关 - 如果我在上传之前对要上传到的文件夹设置打开权限,程序可以正常上传。尽管出于权限问题,我应该得到
IOError: [Errno 13] Permission denied
,但自从我进行了更改后,我没有遇到任何错误。我不确定是服务器给 Paramiko 的响应是问题,还是 Paramiko 本身的错误导致
IOError: [Errno 2] No such file
而不是Errno 13
,但这似乎已经解决了问题。