在Python输出中引用POSIX shell特殊字符
有时候,我会从Python自动生成一些小的shell脚本,我想确保文件名的参数里不包含没有转义的特殊字符。我自己写了一个解决方案,稍后会作为答案提供,但我几乎可以肯定在标准库里见过类似的函数。这里的“见过”是指我没有在像shlex
、cmd
或subprocess
这样明显的模块里找到它。
你知道标准库里有没有这样的函数吗?如果有的话,它在哪里呢?
即使是一个否定的(但明确且正确的 :))答案也可以接受。
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("")
''
其实如果它返回 '""'
可能会更好。