How can I specify that some command line arguments are mandatory in Python?

13,933

Solution 1

The simplest approach would be to do it yourself. I.e.

found_f = False
try:
    opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
except getopt.GetoptError, err:
    print str(err)
    usage()
    sys.exit(2)
for o, a in opts:
    if o == '-f':
      process_f()
      found_f = True
    elif ...
if not found_f:
    print "-f was not given"
    usage()
    sys.exit(2)

Solution 2

As for me I prefer using optparse module, it is quite powerful, for exapmle it can automatically generate -h message by given options:

from optparse import OptionParser

parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
                  help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
                  action="store_false", dest="verbose", default=True,
                  help="don't print status messages to stdout")

(options, args) = parser.parse_args()

You should manually check if all arguments were given:

if len(args) != 1:
        parser.error("incorrect number of arguments")

Making options mandatory seems to be quite strange for me - they are called options not without any sense...

Share:
13,933
Nathan Fellman
Author by

Nathan Fellman

SOreadytohelp

Updated on June 07, 2022

Comments

  • Nathan Fellman
    Nathan Fellman almost 2 years

    I'm writing a program in Python that accepts command line arguments. I am parsing them with getopt (though my choice of getopt is no Catholic marriage. I'm more than willing to use any other library). Is there any way to specify that certain arguments must be given, or do I have to manually make sure that all the arguments were given?

    Edit: I changed all instances of option to argument in response to public outcry. Let it not be said that I am not responsive to people who help me :-)

  • Nathan Fellman
    Nathan Fellman over 14 years
    I was looking for a way not to do it myself, but if there is none, then I guess this is the answer.
  • Nathan Fellman
    Nathan Fellman over 14 years
    If the value must be given, but you have the option of which value to give, then it's still an option, isn't it? What would you call it?
  • Nathan Fellman
    Nathan Fellman over 14 years
    sure. I'm writing a script that works on a file. If you don't specify a filename, the script won't know what to work on, so the filename is mandatory.
  • Mikhail Churbanov
    Mikhail Churbanov over 14 years
    So, in terms of optparse this is arguments ('args' in the code above), and unfortunatelly, as I wrote you should check them manually...