我有兴趣在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"
...它希望第一个字符是标识符。
答案 0 :(得分:8)
在Python 3.3中,您可以使用shlex.quote返回字符串的shell转义版本。它是pipes.quote的继承者,自Python 1.6以来就被弃用了。请注意,文档建议使用此,以便您无法使用列表,如另一个答案所示。另外根据文档,引用与UNIX shell兼容。我无法保证它适用于您的情况,但使用rm
进行快速测试,因为我没有Python 3.3:
pipes
答案 1 :(得分:4)
正确地完成这意味着不必担心这一点。贝壳必须担心空间,引号和parens; Python没有。
proc = subprocess.Popen([..., "-DSOME_MACRO(a, b)=some expression", ...], ...)