[Tutor] argparse iterable

Dave Angel davea at davea.name
Tue Apr 2 03:37:16 CEST 2013


On 04/01/2013 09:31 PM, Mark Lawrence wrote:
> On 02/04/2013 01:31, kendy at kendy.org wrote:
>> Dear Tutor
>>
>> I want to compare command line options, to options in a dictionary
>> from a YAML
>> file. The command line will over-ride the options in my file. (The
>> YAML file, and
>> its dictionary are not shown. That part works.)
>>
>> My distilled code:
>>
>> -------------------------------------------------------------------------
>> $ cat h.py
>> #!/usr/bin/python
>>
>> import argparse
>> parser = argparse.ArgumentParser(description='Short sample app')
>>
>> def GetArgs(parser):
>>      parser.add_argument('-a', action="store_true", default=False)
>>      parser.add_argument('-b', action="store", dest="b")
>>      parser.add_argument('-c', action="store", dest="c", type=int)
>>      return parser
>>
>> GetArgs(parser)
>>
>> print(parser.parse_args())
>> print("But this doesn't iter through a b and c:")
>> for k,v in parser.parse_args():
>>      print('This arg is %s %s' % k, k[str(v)])
>
> for a in vars(parser.parse_args()):
>      print('This arg is %s' % a)
>
> http://docs.python.org/3/library/argparse.html#the-namespace-object
>
> Please don't ask me for an explanation as it took me long enough to work
> this out from the docs :)
>

http://docs.python.org/2/library/argparse.html

     see section 15.4.4.6 for a very brief explanation of vars()


>> $
>> -------------------------------------------------------------------------
>>
>> My error:
>> $ h.py -a -b hi -c 42
>> Namespace(a=True, b='hi', c=42)
>> But this doesn't iter through a b and c:
>> Traceback (most recent call last):
>>    File "./h.py", line 16, in <module>
>>      for k,v in parser.parse_args():
>> TypeError: 'Namespace' object is not iterable
>> $
>>
>> How can I get parser to be iterable?
>>
>> After I get it to iter, I suppose that I'll be bitten by the boolean
>> and integer
>> type conversions. I'm not sure how to handle that either. Will 'str()'
>> save me?
>>
>> Thanks a million (again!),
>> Ken
>>
>>
>
>


-- 
DaveA


More information about the Tutor mailing list