【问题标题】:What is the difference between distutils.util.split_quoted and shlex.splitdistutils.util.split_quoted 和 shlex.split 有什么区别
【发布时间】:2019-03-05 09:19:45
【问题描述】:

python标准库提供distutils.util.split_quotedshlex.split

是否存在distutils.util.split_quoted(s)shlex.split(s) 给出不同结果的情况?

【问题讨论】:

    标签: python distutils shlex


    【解决方案1】:

    是的。这些算法不同意空格的定义:shlex 硬编码四个字符' \t\r\n',但是distutilsa regex 中使用string.whitespace。因此,它还额外考虑了一些其他字符作为分隔符。

    换页:

    >>> distutils.util.split_quoted('A\fB')
    ['A', 'B']
    >>> shlex.split('A\fB')
    ['A\x0cB']
    

    垂直标签:

    >>> distutils.util.split_quoted('A\vB')
    ['A', 'B']
    >>> shlex.split('A\vB')
    ['A\x0bB']
    

    【讨论】:

    • 一个比另一个“更正确”吗?例如,posix 是否指定了一组空白字符作为分隔符?
    • 这很复杂。 Posix 说要尊重 IFS 变量(例如,您实际上可以将 IFS 设置为使用逗号和空格,然后python3 myscript.py a,b 将在sys.argv 中得到["myscript.py", "a", "b"]。如果未设置 IFS,则系统仅使用空格和制表符 -它应该 not 在换页、垂直制表符甚至回车上拆分字段(我已经在我的 posix 兼容系统上验证了这一点,确实 \r 不会拆分单词)。所以,我会说两者都不完全正确,但shlex.split 可能是两者中“更正确”的一个。
    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    相关资源
    最近更新 更多