I want to use getopt to get input from command line argument with long option only
Example: ./script --empid 123
options, args = getopt.getopt(sys.argv[1:],['empid='])
for opt, arg in options:
print 'opts',opt
if opt in ('--empid'):
emp_Id = arg
I am getting the error getopt.GetoptError: option --empid not recognised
error with the above code. What might have gone wrong?
you didn't read the documentation for getopt.getopt
:
getopt.getopt(args, options[, long_options])
Parses command line options and parameter list. [...]
long_options
, if specified, must be a list of strings with the names of the long options which should be supported. The leading--
characters should not be included in the option name. Long options which require an argument should be followed by an equal sign (=
). Optional arguments are not supported. To accept only long options,options
should be an empty string.
so you have to do:
options, args = getopt.getopt(sys.argv[1:], "", ['empid='])
Quoting from the documentation of getopt
:
Note
The
getopt
module is a parser for command line options whose API is designed to be familiar to users of the Cgetopt()
function. Users who are unfamiliar with the Cgetopt()
function or who would like to write less code and get better help and error messages should consider using theargparse
module instead.
Example of usage of argparse
:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--empid', type=int)
parser.add_argument('positionals', nargs='*')
args = parser.parse_args()
print(args.positionals, args.empid)
This module is much more flexible, advanced and, at the same time, easier to use than getopt
.