Repeat subparameter Python argparser

I am using pythons (2.7.2) argparse (1.1) to parse the command line, and I want to create a subparameter and allow subparser commands to be entered several times. Like this:

./script.py version 1 --file 1 2 3 version 3 --file 4 5 6

Is it possible to create such a thing? Since now, when I try to run a script with such arguments in result namespase, get:

Namespace(file=['4', '5', '6'], n=[1])

n is the version number. Therefore, I get the first version number and the second list of files, not both file lists and versions.

+4
source share
1 answer

To the main analyzer, the subparsers argument is positional, which accepts the choice. But it also highlights ALL the remaining argument lines to the sub-partner.

, :

./script.py version 1 --file 1 2 3 version 3 --file 4 5 6

version . 1 position n. ( ). --file ( ). . , --file nargs='*'. , ['1','2','3','version','3'] , ['4','5','6']. nargs=3, , version, .

, - "version" , , , . --file . , , "UNKNOWNS", .


, append

parser.add_argument('--foo',action='append', nargs=3)

import argparse
parser = argparse.ArgumentParser()
sp = parser.add_subparsers(dest='version')
spp = sp.add_parser('version')
spp.add_argument('n',nargs='*',type=int)
spp.add_argument('--file',nargs=3,action='append')
str = 'version 1 --file 1 2 3 version 3 --file 4 5 6'
print(parser.parse_known_args(str.split()))

(Namespace(file=[['1', '2', '3'], ['4', '5', '6']], n=[1], version='version'), ['version', '3'])

version, .


,

parser = argparse.ArgumentParser()
sp = parser.add_subparsers(dest='sub')
spp = sp.add_parser('version')
spp.add_argument('n',nargs=1,type=int)
spp.add_argument('--file',nargs=3)

sp = spp.add_subparsers(dest='sub1')
spp = sp.add_parser('version')
spp.add_argument('n1',nargs=1,type=int)
spp.add_argument('--file',dest='file1',nargs=3)

str = 'version 1 --file 1 2 3 version 3 --file 4 5 6'
print(parser.parse_args(str.split()))

, "dest", .

Namespace(file=['1', '2', '3'], file1=['4', '5', '6'], n=[1], n1=[3], sub='version', sub1='version')
+4

All Articles