我的python脚本有问题。我想从我的服务器下载文件到我的NAS。我的脚本正在下载每个文件,但包含单引号/ apastrophes和/或空格的文件除外。我已经知道问题所在,但我无法解决问题。问题出在shlex.split()
命令上。它只删除单引号。我也调查了paramiko,但它有点大文件的bug,所以这对我不起作用。我也愿意采用完全不同的方法。
我还想知道是否有可能获得该命令的返回,以便我知道scp成功下载了我的文件或者它是否失败。
import subprocess
import shlex
def download(download_path, remote_path):
command = "sshpass -p %s scp -o StrictHostKeyChecking=no -r %s@%s:%s %s" %\
(ssh_password, ssh_user, host, remote_path, download_path)
args = shlex.split(command)
# call scp
p = subprocess.Popen(args, stdout=subprocess.PIPE, bufsize=1)
for line in iter(p.stdout.readline, b''):
print line,
p.stdout.close()
p.wait()
P.S。:已经有一个类似问题的主题,我无法工作。 Passing a filename with an apostrophe into scp using python
答案 0 :(得分:0)
您没有得到需要分割的任意字符串;您基本上是从各个单词开始,然后将它们自己连接起来。不要那样做只需将command
列为列表即可。
command = [
"sshpass", "-p", ssh_password,
"scp", "-o", "StrictHostKeyChecking=no", "-r",
"%s@%s:%s" % (ssh_user, host, remote_path),
download_path
]
p = subprocess.Popen(command, stdout=subprocess.PIPE, bufsize=1)