How to iterate over arguments
我有这样的剧本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import argparse parser = argparse.ArgumentParser( description='Text file conversion.' ) parser.add_argument("inputfile", help="file to process", type=str) parser.add_argument("-o","--out", default="output.txt", help="output name") parser.add_argument("-t","--type", default="detailed", help="Type of processing") args = parser.parse_args() for arg in args: print(arg) |
但它不起作用。我得到错误:
1 | TypeError: 'Namespace' object is not iterable |
号
如何迭代参数及其值?
如果要在命名空间对象上迭代,请添加"vars":
1 2 | for arg in vars(args): print arg, getattr(args, arg) |
1 2 | >>> vars(args) {'foo': 'BAR'} |
所以
1 2 | for key,value in vars(args).iteritems(): # do stuff |
号
老实说,我不知道你为什么要重复这些论点。这在一定程度上破坏了使用参数解析器的目的。
后
1 | args = parser.parse_args() |
要显示参数,请使用:
1 | print args # or print(args) in python3 |
。
1 | vars(args) |
。
将命名空间转换为字典,您可以使用所有字典方法访问它。这在
参考:文档的命名空间段落-https://docs.python.org/2/library/argparse.html命名空间对象
我使用的是
1 2 | for k in args.__dict__: print k, args.__dict__[k] |
从您的解析器解析操作似乎是一个不错的主意。而不是运行parse_args(),然后尝试从名称空间中挑选内容。
1 2 3 4 5 6 7 8 9 10 11 12 | import argparse parser = argparse.ArgumentParser( description='Text file conversion.') parser.add_argument("inputfile", help="file to process", type=str) parser.add_argument("-o","--out", default="output.txt", help="output name") parser.add_argument("-t","--type", default="detailed", help="Type of processing") options = parser._actions for k in options: print(getattr(k, 'dest'), getattr(k, 'default')) |
。
您可以将"dest"部分修改为"choices",例如,如果您需要另一个脚本中某个参数的预设默认值(例如,通过返回函数中的选项)。
供参考,https://docs.python.org/3/library/argparse.html解析参数
1 | ArgumentParser parses arguments through the parse_args() method. This will inspect the command line, convert each argument to the appropriate type and then invoke the appropriate action. |
。
它不应该这样使用。考虑您的用例,在文档中,它说