在Python中为shell命令转义字符串[复制]

参见英文答案 > 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
$
上一篇:python – 正确地编写用户代理的url


下一篇:php – mysql_real_escape_string()不应该在数据库中留下斜杠吗?