python - 在 Python 中为 shell 命令转义字符串

标签 python shell escaping

<分区>

我有兴趣在 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 兼容。我不能保证它适用于你的情况,但是使用 rm 进行快速测试,使用 pipes 因为我没有 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 - 在 Python 中为 shell 命令转义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18116465/

相关文章:

linux - 如何在多台 CGE 机器上同时运行 shell 脚本?

python - 在 Python XML 解析中保留转义字符

string - VB 字符串中的转义双引号

python - Pandas 条件分组依据和总和

python - MongoEngine 看不到预先存在的记录

linux - 在 bash 脚本中打印子字符串

linux - 在 shell 脚本中创建结构(数据结构)

string - 从字符串中删除转义符,或 "how can I get\out of the way?"

python - 无法找出 keras 输入形状错误?

python - 无法从 PIL 图像构造 tkinter.PhotoImage