Thank you, exactly what I was looking for!

One more question following this. Is there a way to have a customisable action? 
I.e. What if I want to join with space in one case and with coma in another. Is 
there a way to reuse the same action class?

Regards,
DG

> On 27 Nov 2023, at 21:55, Mats Wichmann via Python-list 
> <python-list@python.org> wrote:
> 
> On 11/27/23 04:29, Dom Grigonis via Python-list wrote:
>> Hi all,
>> I have a situation, maybe someone can give some insight.
>> Say I want to have input which is comma separated array (e.g. 
>> paths='path1,path2,path3') and convert it to the desired output - list:
>> import argparse
>> parser = argparse.ArgumentParser()
>> parser.add_argument('paths', type=lambda x: list(filter(str.strip, 
>> x.split(','))))
>> So far so good. But this is just an example of what sort of solution I am 
>> after.
> 
> Maybe use "action" rather than "type" here? the conversion of a csv argument 
> into words seems more like an action.
> 
>> Now the second case. I want input to be space separated array - bash array. 
>> And I want space-separated string returned. My current approach is:
>> import argparse
>> parser = argparse.ArgumentParser()
>> parser.add_argument('paths', nargs='+')
>> args = parser.parse_args()
>> paths = ' '.join(args.paths)
>> But what I am looking for is a way to do this, which is intrinsic to 
>> `argparse` module. Reason being I have a fair amount of such cases and I 
>> don’t want to do post-processing, where post-post-processing happens (after 
>> `parser.parse_args()`).
>> I have tried overloading `parse_args` with post-processor arguments, and 
>> that seemed fine, but it stopped working when I had sub-parsers, which are 
>> defined in different modules and do not call `parse_args` themselves.
> 
> Depending on what *else* you need to handle it may or not may work here to 
> just collect these from the remainders, and then use an action to join them, 
> like:
> 
> import argparse 
> 
> class JoinAction(argparse.Action): 
>    def __call__(self, parser, namespace, values, option_string=None): 
>        setattr(namespace, self.dest, ' '.join(values)) 
> 
> parser = argparse.ArgumentParser() 
> parser.add_argument('paths', nargs=argparse.REMAINDER, action=JoinAction)
> args = parser.parse_args() 
> 
> print(f"{args.paths!r}") 
> 
> 
> 
> 
> 
> 
> -- 
> https://mail.python.org/mailman/listinfo/python-list

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to