python paramiko在使用sftp的windows服务器上给出错误“Permission denied[Errno 13]”

2024-04-23 09:01:07 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用paramiko中的sftp从windows服务器下载一些文件。获取方法是:

def get(self, remotepath, localpath = None):
    """Copies a file between the remote host and the local host."""
    if not localpath:
        localpath = os.path.split(remotepath)[1]
    self._sftp_connect()
    self._sftp.get(remotepath, localpath)

在运行脚本时 sshObj.get('C:\\my_file.txt', 'D:\\python\\'),它抛出错误:

 File "C:\Py34\lib\site-packages\paramiko\sftp_client.py", line 806, in _convert_status
raise IOError(errno.EACCES, text)`PermissionError: [Errno 13] **Permission denied**`

我已授予该文件夹的所有权限。 也与其他用户共享。但错误仍然存在。如果之前有人遇到过这种情况,任何线索都会有帮助。

注意:我安装了freeshd使我的localbox成为ssh服务器。


Tags: 文件the方法self服务器hostparamikoget
3条回答

这与路径命名约定无关。 在本地路径中,没有提到文件名,只是提到了保存文件的目录。 使用: sshObj.get('C:\\my_file.txt', 'D:\\python\\my_file.txt') 而不是 sshObj.get('C:\\my_file.txt', 'D:\\python\\')

谢谢大家! 我终于找到了答案。 这是因为文件路径的格式。

在尝试sshObj.get("/remote_file.txt","C:/tmp/local_file.txt")时,它成功,没有任何错误。

下载工具winSCP,它有一个很好的GUI,可以帮助您正确理解文件路径的格式。

还要检查远程计算机上的基本SFTP文件夹,因为在本例中,错误是由于remote_file.txt不在远程框的根SFTP文件夹(可以手动配置)中而引发的。

由于安装了freeshd,所以您要获取的文件应该位于freeshd提供服务的主目录中。我认为远程路径应该类似于/path/to/file

根据您的代码片段,您希望从c:\\my_file.txt获取文件。至少有两个问题:

  1. 类似POSIX的文件系统使用/,并且没有驱动器路径。C:\永远行不通。
  2. 您的freesdh是否可以访问C:\?我有疑问。

相关问题 更多 >