Option parser question - reading options from file as well as command line

Andrew Robert andrew.arobert at gmail.com
Wed May 17 00:44:21 CEST 2006


Max Erickson wrote:

> I don't know much about optparse, but since I was bored:
> 
>>>> help(o.parse_args)
> Help on method parse_args in module optparse:
> 
> parse_args(self, args=None, values=None) method of 
> optparse.OptionParser instance
>     parse_args(args : [string] = sys.argv[1:],
>                values : Values = None)
>     -> (values : Values, args : [string])
>     
>     Parse the command-line options found in 'args' (default:
>     sys.argv[1:]).  Any errors result in a call to 'error()', which
>     by default prints the usage message to stderr and calls
>     sys.exit() with an error message.  On success returns a pair
>     (values, args) where 'values' is an Values instance (with all
>     your option values) and 'args' is the list of arguments left
>     over after parsing options.
> 
>>>> o.parse_args('seven')
> Traceback (most recent call last):
>   File "<pyshell#15>", line 1, in ?
>     o.parse_args('seven')
>   File "C:\bin\Python24\lib\optparse.py", line 1275, in parse_args
>     stop = self._process_args(largs, rargs, values)
>   File "C:\bin\Python24\lib\optparse.py", line 1322, in _process_args
>     del rargs[0]
> TypeError: object doesn't support item deletion
> 
> That's the result of poking an optionParser instance in Idle. 
> parse_args is expecting something that looks like sys.argv[1:], which 
> is a list. You are passing it a string.
> 
> max
> 
Yup.. the code now works as:

parser = OptionParser()

if len(sys.argv) == 2:
    lines = open(sys.argv[1],"rb").readlines()
    for line in lines:
	    line=line.strip()
	    if not line:
		    continue
	    short, long, dest, help, default = line.split(";")
	    help = "\t\t" + help # Prepend tabs to help message
	    parser.add_option(short, long, dest=dest, help=help, default=default)
else:
    parser.add_option("-m","--qmanager", dest="qmanager",
                help="\t\tQueue Manager to inquire against"),
    parser.add_option("-q","--queue", dest="queue",
                help="\t\tQueue the message will be sent to"),
    parser.add_option("-d","--dest", dest="dest",
                help="\t\tDestination File Name"),
    parser.add_option("-f", "--file",
                action="store", type="string", dest="filename",
                help="File to be transmitted", metavar="FILE")

(options, args) = parser.parse_args()


thanks all for the insight



More information about the Python-list mailing list