IOError:[Errno 2]没有这样的文件-Paramiko put()
问题内容:
我使用的是通过SFTP上传文件的paramiko用sftp.put(localFile, remoteFile)
。如果需要,我会首先创建必要的目录
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)
但此调用产生了与上述完全相同的错误。因此,这似乎不仅仅是上传问题。有任何想法吗?
问题答案:
似乎是远程文件夹权限问题。尽管在上载文件之前创建了远程文件夹,但似乎该文件夹的权限阻止了上载。
问题与这个问题有关-
如果我在上传之前在要上传到的文件夹上设置了打开权限,则该程序可以正常上传。尽管由于权限问题我应该得到IOError: [Errno 13] Permission denied
,但是由于进行了更改,所以我没有遇到任何错误。
我不确定这是服务器给Paramiko造成的问题,还是Paramiko本身的错误IOError: [Errno 2] No such file
而不是引起的Errno 13
,但这似乎已经解决了问题。