【发布时间】:2018-09-28 23:02:21
【问题描述】:
我正在尝试构建一个命令行解析器,它能够在参数之间共享传递的值,以避免必须多次键入它们。否则,我希望两个参数的名称空间相同:
import argparse
class PrintAction(argparse.Action):
def __init__(self, option_strings, dest, **kwargs):
super(PrintAction, self).__init__(option_strings, dest, **kwargs)
def __call__(self, parser, namespace, values, option_string=None):
for val in values:
print(val)
parser = argparse.ArgumentParser(description='A foo that foos and a bar that bars')
parser.add_argument('--foo', action=PrintAction)
parser.add_argument('bar', nargs='+')
args = parser.parse_args(['--foo', 'a', 'b', 'c']) # Case 1
args = parser.parse_args(['a', 'b', 'c']) # Case 2
然后我想要一个解决方案,在 bar 两种情况下存储 ['a', 'b', 'c'],但在提供 --foo 的情况下,然后将打印 a、b 和 c。
目前,我得到的是 foo 仅打印 a 和 bar 仅将 b 和 c 存储在 case 1 中,正确的结果存储在 case 2 中。
【问题讨论】:
标签: python command-line-arguments argparse