Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to add multiple argument options in python using argparse?

My Requirement:

For now when I run my python application with this command

python main.py -d listhere/users.txt

The program will run and save the result file as predefined name say reports.txt

Now I want to add this functionality to allow users to choose what to put the filename and where to save as so

python main.py -d -o output/newfilname -i listhere/users.txt

Everything is same but I want another argument -o to be passed which will determine the filpath and name to be saved. How do I do it. What is the best way to handle or combine multiple options.

I tried this

    parser = argparse.ArgumentParser(description = "CHECK-ACCESS REPORTING.")
    parser.add_argument('--user','-d', nargs='?')
    parser.add_argument('--output','-d -o', nargs='?')
    parser.add_argument('--input','-i', nargs='?')
    args = parser.parse_args(sys.argv[1:])

   if args.output and args.input:
        #operation that involves output filename too
   elif args.user and not args.input:
       #default operation only
   else:
      #notset

I am getting this error when trying to solve the issue this way

Error:

report.py: error: unrecognized arguments: -o listhere/users.txt

like image 585
Tara Prasad Gurung Avatar asked Jun 25 '17 10:06

Tara Prasad Gurung


1 Answers

A nargs='?' flagged option works in 3 ways

parser.add_argument('-d', nargs='?', default='DEF', const='CONST')

commandline:

foo.py -d value # => args.d == 'value'
foo.py -d       # => args.d == 'CONST'
foo.py          # => args.d == 'DEF'

https://docs.python.org/3/library/argparse.html#const

Taking advantage of that, you shouldn't need anything like this erroneous -d -o flag.

If you don't use the const parameter, don't use '?'

parser.add_argument('--user','-u', nargs='?', const='CONST', default='default_user')
parser.add_argument('--output','-o', default='default_outfile')
parser.add_argument('--input','-i', default='default_infile')
like image 158
hpaulj Avatar answered Nov 09 '22 08:11

hpaulj