argparse选择的别名

时间:2019-10-08 09:07:27

标签: python argparse

是否可以在argparse参数中为选择引入别名?

具体来说,我想让用户指定一个简短的参数,例如main.py --task a,并在运行{'task': "a_long_filename"}之后自动将其扩展为parse_args()

我希望以下内容可以存在,但在argparse文档中找不到任何内容:

parser.add_argument("--task",
                    choices={"a": "a_long_filename", "b": "b_long_filename"},
                    default=""a_long_filename"", help="Task to be solved."
                   )

2 个答案:

答案 0 :(得分:1)

import argparse


TASK_CHOICES = {"a": "a_long_filename", "b": "b_long_filename"}


def get_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("--task",
                    choices=TASK_CHOICES.keys(),
                    default="a", 
                    help="Task to be solved.",
                   )
    return parser, parser.parse_args()


parser, args = get_args()
args.task = TASK_CHOICES.get(args.task)
print(args)

输出:

$ python3 arg_task.py --task a
Namespace(task='a_long_filename')
$ python3 arg_task.py --task b
Namespace(task='b_long_filename')

答案 1 :(得分:1)

您可以实现argparse.Action的子类来进行转换:

export enum Colors {
  Blue = "333CFF",
  Yellow = "FCFF33",
  Green = "33FF36",
}

interface IColorProps {
  myColors?: Colors ;
}

export interface IParentComponentProps {
  colors: IColorProps; 
}