我正在编写一个需要下载远程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
答案 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"
或者更好的方法是使用与路径相关的功能来创建平台无关的路径。