我有以下文字:
'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 - Python shlex.split()无法保留单引号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17684937/