我想创建一个命令行标志,可以用作
./prog.py --myarg=abcd,e,fg
并在解析器内部将其转换为 ['abcd', 'e', 'fg']
(一个元组也可以)。
我已经使用 action
和 type
成功地完成了这项工作,但我觉得其中一个可能是滥用系统或缺少角落案例,而另一个是正确的。但是,我不知道哪个是哪个。
随着 action
:
import argparse
class SplitArgs(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, values.split(','))
parser = argparse.ArgumentParser()
parser.add_argument('--myarg', action=SplitArgs)
args = parser.parse_args()
print(args.myarg)
取而代之的是 type
:
import argparse
def list_str(values):
return values.split(',')
parser = argparse.ArgumentParser()
parser.add_argument('--myarg', type=list_str)
args = parser.parse_args()
print(args.myarg)
原文由 Ryan Haining 发布,翻译遵循 CC BY-SA 4.0 许可协议
我发现您的第一个解决方案是正确的。原因是它允许您更好地处理默认值:
这不适用于 list_str,因为默认值必须是字符串。