sftp.get python paramiko [没有这样的文件]

时间:2014-02-05 18:35:22

标签: paramiko

我正在编写一个需要下载远程xml文件来解析它的Python脚本。

我正在使用paramiko。

这是脚本:

def copyFile(ip, user, pwd, remotePath, localPath):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    ssh.connect(ip,username=user,password=pwd)
    ### Copy remote file to server        
    sftp = ssh.open_sftp()
    sftp.get(remotePath,localPath)
    sftp.close()
    ssh.close()
    return ["OK",0,0]
except IOError as e:
    flash(str(e)+" IOERROR")
    return ["IOERROR: " + str(e),0,0]
except Exception as e:
    flash(str(e)+" OTHER EXCEPTION")
    return ["Error: " + str(e),0,0]

代码返回,IOError表示该文件不存在。

但是如果我将变量换成字符串,它就可以完美地运行。:

   `sftp.get("/etc/conf/file-cfg.xml","./conf/file-cfg.xml")` 

正确传递变量:

    `copyFile(ip,username,pwd,"/etc/conf/"+i,"."+i)`

我失去了很多时间试图找出什么是错的,但是你取得了任何成功。

我的远程机器:Ubuntu 13.10 x64 本地计算机:Windows 7 x64

3 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,但后来发现有一个尾随的\ n字符,这是看不见的。

所以我建议调用strip()方法来删除不可见的前导/尾随字符,这可能是有问题的字符

strip()在我这边工作。

答案 1 :(得分:1)

我使用Paramiko有类似的问题。我正在连接字符串以创建我的路径

localpath = root + '\' + filename
remotepath = root + '\' + filename

我发现字符串工作但串联的字符串没有。 Sooooooo

local_path = str(localpath)
remote_path = str(remotepath)
sftp.get(remote_path,local_path)

它可能看起来很难看,但它对我有用。

答案 2 :(得分:0)

我最好将此类字符串用于原始字符串文字。喜欢

remotePath = r"/etc/conf/file-cfg.xml"

或者更好的方法是使用与路径相关的功能来创建平台无关的路径。