Python 使用shlex拆分带空格和撇号的命令

Python 使用shlex拆分带空格和撇号的命令,python,Python,我的python脚本有问题。我想将文件从服务器下载到NAS。我的脚本正在下载每个文件,但包含单引号/apastrophes和/或空格的文件除外。我已经知道问题出在哪里了,但我无法解决它。问题在于shlex.split()命令。它只是删除单引号。我也调查了paramiko,但它有点大文件,所以这对我不起作用。我也对完全不同的方法持开放态度 我还想知道是否有可能得到该命令的返回,这样我就知道scp成功下载了我的文件,或者它失败了 import subprocess import shlex

我的python脚本有问题。我想将文件从服务器下载到NAS。我的脚本正在下载每个文件,但包含单引号/apastrophes和/或空格的文件除外。我已经知道问题出在哪里了,但我无法解决它。问题在于
shlex.split()
命令。它只是删除单引号。我也调查了paramiko,但它有点大文件,所以这对我不起作用。我也对完全不同的方法持开放态度

我还想知道是否有可能得到该命令的返回,这样我就知道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()

旁白:已经有一个主题有类似的问题,我无法工作

您不会得到需要拆分的任意字符串;您基本上是从单个单词开始,然后自己连接它们。不要那样做;只需将
命令
列成一个列表即可

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)

请尝试
shlex.split(command,posix=False)
@Peter感谢您的快速回复。我尝试了一下,发现了一个新错误:
bash:-c:line 0:在查找匹配项时出现意外的EOF
'`bash:-c:line 1:语法错误:意外的文件结尾