【问题标题】:Quote POSIX shell special characters in Python output在 Python 输出中引用 POSIX shell 特殊字符
【发布时间】:2011-02-11 04:21:00
【问题描述】:

有时我会从 Python 自动创建小型 shell 脚本,并且我想确保文件名参数不包含非转义的特殊字符。我推出了自己的解决方案,我将提供答案,但我几乎可以肯定我已经在标准库的某个地方看到了这样的函数。 “丢失”是指我没有在 shlexcmdsubprocess 这样的明显模块中找到它。

你知道标准库中有这样一个函数吗?如果有,在哪里?

即使是否定的(但肯定和正确的:)答案也会被接受。

【问题讨论】:

标签: python shell posix escaping special-characters


【解决方案1】:

pipes.quote():

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

虽然请注意,它可能存在一个错误,即零长度 arg 将不返回任何内容:

>>> quote("")
''

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

【讨论】:

  • 好的,谢谢!而且它在一个明显的模块中(对于 POSIX 用户),所以我弄错了。
  • 有时subprocess.list2cmdline 也很有用;它确实转义shell metachars,但确实处理转义引用和转义空格,因此当您想要调用远程shell但它通过一个或多个附加层时非常好在途中进行反转义,例如通过ssh 远程命令调用。
【解决方案2】:

我使用的函数是:

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

也就是说:我总是用双引号将文件名括起来,然后将唯一的特殊字符引用在双引号内。

【讨论】:

  • 当你问一个问题只是为了回答它时,这不是很令人气愤吗,这首先是一个骗局? :P(最近也发生在我身上。)
  • @Roger:见鬼。 SO的搜索机制需要改进。在提问之前,我确实搜索过答案。请注意,我的答案从未打算被选为 the 答案。我也投票赞成结束这个问题。
  • Indeed, it does. 我并没有对你提出的问题说任何坏话(在写作和发帖的所有思考过程之后,甚至可能很难搜索),只是想分享挫败感。
猜你喜欢
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多