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

./prog.py --myarg=abcd,e,fg

在解析器内部,将其转换为['abcd', 'e', 'fg'](一个元组也可以).

我已经用actiontype成功地做到了这一点,但我觉得其中一个很可能是滥用系统或遗漏角落 case ,而另一个是正确的.然而,我不知道哪个是哪个.

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)

推荐答案

我发现你的第一个解决方案是正确的.原因是它允许您更好地处理默认值:

names: List[str] = ['Jane', 'Dave', 'John']

parser = argparse.ArumentParser()
parser.add_argument('--names', default=names, action=SplitArgs)

args = parser.parse_args()
names = args.names

这不适用于list_str,因为默认值必须是字符串.

Python-3.x相关问答推荐

使用Python装载. iso文件

一种基于绝对排序值的极框索引和列定位的Python方法

如何通过Pandas为不同的列集垂直设置列数据?

按小时和日期对Pandas 数据帧进行分组

谁能解释一下这个带邮编的多功能环路?

我想判断df_entry_log[AM_PM],并根据测试填充列

使用 iloc 或 loc 对多列进行过滤

将自定义函数应用于 pandas 数据框的每一列

如何将函数映射到所有命名元组的元素?

DataFrame列中如何迭代重复值?

从 LeetCode 的 Python 解决方案类中理解关键字 self

如何在 20 秒后重复使用 Pillow 在现有图像上创建新图像?

使用大型多个数据集,其中每个数据集包含多个值 - Pytorch

两个Pandas数据框中的共同列列表

将字符串表示与使用整数值的枚举相关联?

TypeError:多个基地有实例布局冲突

Python pathlib 获取父级相对路径

尾部斜杠的 FastAPI 重定向返回非 ssl 链接

使用 Python 3 读取 CSV 文件

在 Python 中生成马尔可夫转移矩阵