Я хочу создать флаг командной строки, который можно использовать как
./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)