argparse действие или тип для списка через запятую - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу создать флаг командной строки, который можно использовать как

./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)
...