在Python输出中引用POSIX shell特殊字符

6 投票
2 回答
2672 浏览
提问于 2025-04-15 21:55

有时候,我会从Python自动生成一些小的shell脚本,我想确保文件名的参数里不包含没有转义的特殊字符。我自己写了一个解决方案,稍后会作为答案提供,但我几乎可以肯定在标准库里见过类似的函数。这里的“见过”是指我没有在像shlexcmdsubprocess这样明显的模块里找到它。

你知道标准库里有没有这样的函数吗?如果有的话,它在哪里呢?

即使是一个否定的(但明确且正确的 :))答案也可以接受。

2 个回答

1

我使用的函数是:

def quote_filename(filename):
    return '"%s"' % (
        filename
        .replace('\\', '\\\\')
        .replace('"', '\"')
        .replace('$', '\$')
        .replace('`', '\`')
    )

也就是说:我总是把文件名放在双引号里,然后只对双引号里面的特殊字符进行转义。

6

pipes.quote():

>>> from pipes import quote
>>> quote("""some'horrible"string\with lots of junk!$$!""")
'"some\'horrible\\"string\\\\with lots of junk!\\$\\$!"'

不过要注意,它可能有个小问题,就是如果传入一个长度为零的参数,它会什么都不返回:

>>> quote("")
''

其实如果它返回 '""' 可能会更好。

撰写回答