gpt4 book ai didi

python - 逗号分隔列表的 argparse 操作或类型

转载 作者:行者123 更新时间:2023-12-03 14:43:39 25 4
gpt4 key购买 nike

我想创建一个可以用作的命令行标志

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

最佳答案

最简单的解决方案是将您的参数视为字符串并拆分。

#!/usr/bin/env python3

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--myarg", type=str)
d = vars(parser.parse_args())
if "myarg" in d.keys():
d["myarg"] = [s.strip() for s in d["myarg"].split(",")]
print(d)
结果:
$ ./toto.py --myarg=abcd,e,fg
{'myarg': ['abcd', 'e', 'fg']}
$ ./toto.py --myarg="abcd, e, fg"
{'myarg': ['abcd', 'e', 'fg']}

关于python - 逗号分隔列表的 argparse 操作或类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52132076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com