解析数字的命令行输入

nor*_*ski 9 python command-line parsing

我正在编写命令行应用程序,并希望用户能够输入数字作为单个数字或作为范围.所以,例如:

$ myapp -n 3,4,5,6
Run Code Online (Sandbox Code Playgroud)

要么

$ myapp -n 3-6
Run Code Online (Sandbox Code Playgroud)

我希望我的应用程序将这些放入Python列表中,例如,[3,4,5,6]我正在使用optparse,但我不确定如何从这两种输入样式创建列表.一些示例代码会很棒.

编辑

我希望能够输入多个范围:

$ myapp -n 22-27, 51-64
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 14

import argparse

def parse_range(astr):
    result = set()
    for part in astr.split(','):
        x = part.split('-')
        result.update(range(int(x[0]), int(x[-1]) + 1))
    return sorted(result)

parser = argparse.ArgumentParser()
parser.add_argument('-n', type=parse_range)
args = parser.parse_args()
print(args.n)
Run Code Online (Sandbox Code Playgroud)

产量

% script.py -n 3-6
[3, 4, 5, 6]

% script.py -n 3,6
[3, 6]

% script.py -n 22-27,51-64 
[22, 23, 24, 25, 26, 27, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64]
Run Code Online (Sandbox Code Playgroud)