parser.add_argument能否一次传入多个参数

问题遇到的现象和发生背景

我正在写一个小程序,涉及到使用parser.add_argument函数输入多达9个参数,这样太麻烦,要逐个输入9次因为一次输入的参数太多。我希望能有一个优化解决方案,一次输入多个参数,例如至少一次输入3个列数。

用代码块功能插入代码,请勿粘贴截图
parser.add_argument('x1',type=int,help='输入x1所在列数')    # 选择数组某一列
parser.add_argument('y1',type=int,help='输入y1所在列数')
parser.add_argument('z1',type=int,help='输入z1所在列数')
parser.add_argument('x2',type=int,help='输入x2所在列数')   
parser.add_argument('y2',type=int,help='输入y2所在列数')
parser.add_argument('z2',type=int,help='输入z2所在列数')
parser.add_argument('x3',type=int,help='输入x3所在列数')
parser.add_argument('y3',type=int,help='输入y3所在列数')
parser.add_argument('z3',type=int,help='输入z3所在列数')
运行结果及报错内容

没有报错,可以运行,但太麻烦。

我的解答思路和尝试过的方法

我尝试过使用input函数,但过不去,后面的代码不执行。
x1,y1,z1=eval(input("请输入x1,y1,z1所在列数,中间用逗号分开:"))
如果使用这一行代替parser.add_argument,后面的代码不执行。

我想要达到的结果

我希望GUI界面简捷一些,一次能输入多个参数。如果需要,可以提供数据。

思路1:
比如想设置个参数,它可以接收多个整数值,那么可以在add_argument中设置action=“append”

import argparse
parser=argparse.ArgumentParser()
parser.add_argument("--foo",type=int,default=[],action="append")

opt=parser.parse_args()

print(opt.foo)

思路2:
不设置action,而是设置nargs=“+”,这样可以不用挨个值前面都跟一个–arg_name

import argparse
parser=argparse.ArgumentParser()
parser.add_argument("--foo",type=float,default=[],nargs="+")

opt=parser.parse_args()

print(opt.foo)
import argparse


class FooAction(argparse.Action):
    def __init__(self, option_strings, dest, nargs=None, **kwargs):
        if nargs is not None:
            raise ValueError("nargs not allowed")
        super().__init__(option_strings, dest, **kwargs)

    def __call__(self, parser, namespace, values, option_string=None):
        split = values.split(':')
        for i in range(0, 3):
            setattr(namespace, f'x{i + 1}', split[i * 3])
            setattr(namespace, f'y{i + 1}', split[i * 3 + 1])
            setattr(namespace, f'z{i + 1}', split[i * 3 + 2])


parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('--extend', action=FooAction)

args = parser.parse_args()
print(args)

可以将它包装成一个函数,参数是列表,通过for循环添加进去

参考一下


python之parser.add_argument()用法——命令行选项、参数和子命令解析器_夏普通的博客-CSDN博客_parser.add 目录argparse介绍argparse使用——代码示例1、创建一个解析器——创建 ArgumentParser() 对象描述description2、添加参数——调用 add_argument() 方法添加参数add_argument() 方法定义如何解析命令行参数3、解析参数——使用 parse_args() 解析添加的参数结果测试action='store_true'的使用说明argparse介绍官方文档argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块,argpa https://blog.csdn.net/qq_34243930/article/details/106517985?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166925103416800192261487%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166925103416800192261487&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-106517985-null-null.nonecase&utm_term=parser.add_argument%E8%83%BD%E5%90%A6%E4%B8%80%E6%AC%A1%E4%BC%A0%E5%85%A5%E5%A4%9A%E4%B8%AA%E5%8F%82%E6%95%B0&spm=1018.2226.3001.4450

参考一下呢

parser = argparse.ArgumentParser ( description="test list" )
parser.add_argument ( '--weight', nargs = '+', type=int, default = [1,2,3,4,5,6,7,8,9], )
args = parser.parse_args()
x1,x2,x3,y1,y2,y3,z1,z2,z3=args.weight