On Oct 16, 10:59 pm, jimgardener <jimgarde...@gmail.com> wrote: > hi > I have a program which I call findmatch that expects these arguments > 1.a person name > 2.a group name > 3.an integer > 4.a float value > > I thought I would allow user to call this program either using options > or using positional arguments in a predefined order > ie, > findmatch -f schoolmates -i jon -t 3.5 -n 115 > or > findmatch jon schoolmates 115 3.5 > > I tried to code this using optparser.. > > def parse_arguments(): > usage = """usage: %prog [options] > eg: > findmatch -i jon -f schoolmates -n 115 -t 3.5 > """ > parser = OptionParser(usage) > > parser.add_option('-i','--person',dest='personname',help='person > to be matched') > parser.add_option('-f','-group',dest='groupname', help='group > containing people to be tested against') > parser.add_option('-n','-- > num',dest='samplenumber',type='int',help='how many samples to be used > ') > parser.add_option('-t','-- > cutoff',dest='cutoff',type='float',help='some upperlimit ') > > options,args = parser.parse_args() > > def check_if_person_name_valid(name): > if not person_exists(name): > parser.error('you must give an valid person name') > def check_if_group_name_valid(name): > if not group_exists(name): > parser.error('you must give a valid group') > > if not options.personname or not options.groupname: > print parser.format_help() > parser.exit() > check_if_person_name_valid(options.personname) > check_if_group_name_valid(options.groupname) > > return options > > iif __name__=='__main__': > options = parse_arguments() > person_name = options.personname > group = options.groupname > number_of_samples_to_use = options.samplenumber > cutoff = options.cutoff > msg = 'You are trying to match {0} against group {1} using {2} > samples \ > and using {3:2.2f} as the upper limit ' > print msg.format(person_name , group , number_of_samples_to_use , > cutoff ) > > This can handle keyword arguments.But if I have to allow a user to > input arguments without options > ie > findmatch jon schoolmates 115 3.5 > > can I do this in the above method? If user enters the above line ,the > options instance would have > { 'personname': None ,'groupname': None ...} > and > args will contain a list of positional arguments . > > I am not sure how this can be processed so that a user is given > freedom to choose either. > Any suggestions most welcome. > regards, > jim
You could check if args has 4 elements, assuming they are the positional args just assign them to the options Or you could check the command line to see if there are any items starting with '-', and then proceed accordingly. -- http://mail.python.org/mailman/listinfo/python-list