Python : parsing the command line options using optparse

Peter Otten __peter__ at web.de
Sat Mar 1 06:37:16 EST 2014


Ganesh Pal wrote:

> Iam using the options.name  directly  for manipulations is this fine or do
> I need to assign it to variable and then use it

> if options.object_type == 'LIN':
>        corrupt_inode()

This is fine. You would only consider storing the value if you are going to 
use it very often (millions rather than thousands) in a time-critical loop.


> I wanted to use dictionary to match the above if else behavior (we don't
> have switch in python I guess ) and  If else looks very untidy.

> Is it possible to store the options.object_type as a key in the dictionary
> and   then based on the value entered in the command line invoke the
> appropriate function

> I tried creating a dictionary like this but Iam getting a wrong output

> object_type_dictonary = { 'LIN' : corrupt_inode(),
>                           'INODE' : corrupt_lin(),
>                           'DATA' : corrupt_data(),
>                    };

> and then  ran # python corrupt.py -object_type= inode  (  This prints all
> the values for me)

That's because you are storing the result of the function call when you 
should be storing the function itself:

# build the dispatch table:
object_type_dictionary = {
    "LIN": corrupt_lin, # no () here, we're storing the function
    "INODE": corrupt_inode,
    "DATA": corrupt_data
}

...

handler = object_type_dictionary[options.object_type] # look up the function
handler() # call it

The last two lines could also be merged into one

object_type_dictionary[options.object_type]()

but the first version may be clearer.




More information about the Python-list mailing list