IOError:[Errno 2]没有这样的文件-Paramiko put()


问题内容

我使用的是通过SFTP上传文件的paramikosftp.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,但这似乎已经解决了问题。