Python,如何解析字符串看起来像sys.argv

Gre*_*ind 40 python parsing argv

我想解析这样的字符串:

-o 1  --long "Some long string"  
Run Code Online (Sandbox Code Playgroud)

进入这个:

["-o", "1", "--long", 'Some long string']
Run Code Online (Sandbox Code Playgroud)

或类似的.

这与getopt或optparse不同,后者以sys.argv解析的输入开头(就像我上面的输出一样).有没有标准的方法来做到这一点?基本上,这是"分裂",同时保持引用的字符串在一起.

到目前为止我的最佳功能:

import csv
def split_quote(string,quotechar='"'):
    '''

    >>> split_quote('--blah "Some argument" here')
    ['--blah', 'Some argument', 'here']

    >>> split_quote("--blah 'Some argument' here", quotechar="'")
    ['--blah', 'Some argument', 'here']
    '''
    s = csv.StringIO(string)
    C = csv.reader(s, delimiter=" ",quotechar=quotechar)
    return list(C)[0]
Run Code Online (Sandbox Code Playgroud)

Jac*_*son 77

我相信你想要shlex模块.

>>> import shlex
>>> shlex.split('-o 1 --long "Some long string"')
['-o', '1', '--long', 'Some long string']
Run Code Online (Sandbox Code Playgroud)

  • 我猜`列表(a.decode('utf-8')用于shlex.split(u'abc 123→'.encode('utf-8')))`将起作用. (2认同)