python argparse:没有标志的arg

Mar*_*rte 9 python argparse python-3.x

我有以下代码:

parser.add_argument('file', help='file to test')
parser.add_argument('-revs', help='range of versions', nargs='+', default=False)
Run Code Online (Sandbox Code Playgroud)

有没有办法-revs在使用它时不使用标志,如下所示:

./somescript.py settings.json 1 2 3 4
Run Code Online (Sandbox Code Playgroud)

Flo*_*gFR 16

是.

您有多种解决方案:

  • 正如Mrav所提到的,你可以使用系统参数(sys.argv [0 ...])
  • 或者使用argparse.从文档(符合python3),您可以这样做:

    if __name__ == '__main__':
        parser = ArgumentParser()
        parser.add_argument('file')
        parser.add_argument('revs', metavar='N', type=int, nargs='+', help='revisions')
        res = parser.parse_args()
        pprint(res)
    
    Run Code Online (Sandbox Code Playgroud)

你可以看到结果:

$ ./test.py  settings.json 1 2 3
Namespace(file='settings.json', revs=[1, 2, 3])
Run Code Online (Sandbox Code Playgroud)