SFTP获取Python Paramiko时出现[无此文件]错误

10

我正在编写一个Python脚本,需要下载远程的xml文件并进行解析。

我使用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个回答

11

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

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

strip() 在我的情况下起作用。


2

我在使用Paramiko时遇到了类似的问题。我正在将字符串连接起来以创建我的路径。

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

我发现字符串可以使用,但连接的字符串却不行。
local_path = str(localpath)
remote_path = str(remotepath)
sftp.get(remote_path,local_path)

虽然看起来不太美观,但这对我很有效。


0

对于这样的字符串,我最好使用原始字符串字面量。例如

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

或者,更好的方法是使用与路径相关的函数来创建跨平台的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接