参见英文答案 > How to escape os.system() calls? 10个
我有兴趣在Python3.x中转义字符串,例如:
SOME_MACRO(a, b)
成…
SOME_MACRO\(a,\ b\)
…这样它就可以作为定义传递给程序(在本例中不是gcc),
例如,
some_program -DSOME_MACRO\(a,\ b\)="some expression"
我希望shlex有这个功能,但我没有找到如何做到这一点并检查了许多类似的问题.
我不介意写一些简单的函数来做到这一点,但这似乎是Python所包含的东西.
注意:程序我传递的参数不会接受:
-D"SOME_MACRO(a, b)"="some expression"
…它希望第一个字符是标识符.
解决方法:
在Python 3.3中,您可以使用shlex.quote返回字符串的shell转义版本.它是pipes.quote的继承者,自Python 1.6以来已被弃用.请注意,文档建议在不能使用列表的情况下,如另一个答案中所建议的那样.另外根据文档,引用与UNIX shell兼容.我无法保证它适用于您的情况,但使用管道进行快速测试,因为我没有Python 3.3:
$touch \(a\ b\)
$ls
(a b)
>>> import subprocess, pipes
>>> filename = pipes.quote("(a b)")
>>> command = 'rm {}'.format(filename)
>>> subprocess.Popen(command, shell=True)
$ls
$