有时我会自动从Python创建小型shell脚本,并且我想确保文件名参数不包含非转义特殊字符。我已经推出了自己的解决方案,我将作为答案提供,但我几乎可以肯定,我已经看到这样的功能在标准库中丢失了。 “丢失”我的意思是我没有在shlex
,cmd
或subprocess
等显而易见的模块中找到它。
你知道stdlib中有这样的功能吗?如果是的话,它在哪里?
即使是否定的(但明确且正确的)答案也将被接受。
答案 0 :(得分:6)
pipes.quote()
:
>>> from pipes import quote
>>> quote("""some'horrible"string\with lots of junk!$$!""")
'"some\'horrible\\"string\\\\with lots of junk!\\$\\$!"'
虽然注意到它可能会出现一个错误,其中零长度的arg将不会返回任何内容:
>>> quote("")
''
如果它返回'""'
可能会更好。
答案 1 :(得分:1)
我使用的功能是:
def quote_filename(filename):
return '"%s"' % (
filename
.replace('\\', '\\\\')
.replace('"', '\"')
.replace('$', '\$')
.replace('`', '\`')
)
即:我总是用双引号括起文件名,然后在双引号内引用特殊字符。