optparse: best way

Jean-Michel Pichavant jeanmichel at sequans.com
Wed Jun 9 06:11:51 EDT 2010


hiral wrote:
> On Jun 8, 3:03 pm, Jean-Michel Pichavant <jeanmic... at sequans.com>
> wrote:
>   
>> hiralwrote:
>>     
>>> Hi,
>>>       
>>> I am using optparser to do following...
>>>       
>>> Command syntax:
>>> myscript -o[exension] other_arguments
>>>     where; extension can be 'exe', 'txt', 'pdf', 'ppt' etc.
>>>       
>>> Now to parse this, I am doing following...
>>>       
>>> parser.add_option("-oexe', dest=exe_file...)
>>> parser.add_option("-otxt', dest=txt_file...)
>>> parser.add_option("-opdf', dest=pdf_file...)
>>> parser.add_option("-oppt', dest=ppt_file...)
>>>       
>>> The above way is the most simple way to parser options.
>>> Can you please suggest any other best way / optimized way to parse
>>> these kind of options.
>>>       
>>> Thank you in advance.
>>>       
>> Here's a solution:
>>
>> import optparse
>>
>> class Process:
>>     PREFIX = 'dispatch_'
>>     @staticmethod
>>     def undef():
>>         print 'unsupported file type'
>>     @staticmethod
>>     def dispatch_exe():
>>         print 'Hello exe file !'
>>
>> def dispatchFileType(option, opt, value, parser):
>>     """Called by the parser, -o option."""
>>     # call the corresponding method in the process method
>>     getattr(Process, Process.PREFIX + value, Process.undef)()
>>
>> parser = optparse.OptionParser()
>> parser.add_option("-o", "--output-fileType", type="string",
>> action="callback", callback=dispatchFileType)
>>
>> options, args = parser.parse_args()
>>
>> Cheers,
>>
>> JM- Hide quoted text -
>>
>> - Show quoted text -
>>     
>
> Hi JM,
>
> Here it gives...
> $ python above_script.py -oexe abc
> Hello exe file !
> {'output_fileType': None} # print options
> ['abc'] # print args
>
> In my case I require to have 'options' to consume 'abc' like...
> {'output_fileType': 'abc'}
>
> Thank you.
>
>   

use 

python above_script.py -o "exe abc"

and change the dispatch function to 

def dispatchFileType(option, opt, value, parser):
    """Called by the parser, -o option."""
    # call the corresponding method in the process method
    for item in value.split():
    	getattr(Process, Process.PREFIX + item, Process.undef)()


Regards,

JM



More information about the Python-list mailing list