Python shlex.split() 不能保留单引号

标签 python regex split lex shlex

我有以下文字:

'sudo -S java -cp spinn3r-client-3.4.06.jar com.spinn3r.api.Main --vendor=test --remote-filter=\'(and (eq source:publisher_type " WEBLOG") (eq dc_lang:English) \''

现在我需要将其拆分以使用子进程模块运行。我尝试使用 shlex.split。我得到以下信息:

['sudo',
 '-S',
 'java',
 '-cp',
 'spinn3r-client-3.4.06.jar',
 'com.spinn3r.api.Main',
 '--vendor=test',
 '--remote-filter=(and (eq source:publisher_type " WEBLOG") (eq dc_lang:English) ']

如您所见,--remote-filter 后面的单引号已被删除。我的文本中需要这些单引号。我该如何保存这些引言?

最佳答案

尽管它去掉了单引号,但在使用 subprocess 时似乎可以很好地解释。

#!/bin/bash
# > someScript
echo ${1} # sudo
echo ${2} # -S
echo ${3} # --vendor=test
echo ${4} # --remote-filter=(simple) (<--space-->)
echo ${5} # --foo
echo ${6} # bar
#!/usr/bin/env python
import subprocess, shlex

subprg = (
    './someScript sudo -S --vendor=test '
    '--remote-filter=\'(simple) (<--space-->) \' --foo bar')

subprocess.call(shlex.split(subprg))

另一种方法是直接传入文本,但有一些security issues有了它。

subprocess.call('./someScript sudo -S ...', shell=True)

关于Python shlex.split() 不能保留单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17684937/

相关文章:

mysql - 如何从查询中的url中提取id?

arrays - Bash:将字符串拆分为数组

python - 在 pymongo 的运行命令中使用 "from"作为 kwarg 键

python - 两个分类变量之间的比较

用于 $ 替换的 Java 正则表达式

c - 问号 (?) 在正则表达式中不起作用

python - 从matlab中直接在python中使用sklearn

python - Pycharm 转换空格并且不会转换回来

java - 如何根据更改的字符而不是单个分隔符来拆分字符串?

python:读取文件并将其拆分为字典列表