gpt4 book ai didi

python - 将变量分配给多个 argparse 属性

转载 作者:行者123 更新时间:2023-12-04 16:57:31 24 4
gpt4 key购买 nike

我正在尝试根据它们在属性列表中的位置分配多个参数属性。举个例子;

import argparse
import sys

def args_options:
parser = argparse.ArgumentParser()
parser.add_argument('-s', help='-s argument help', nargs=3)
parser.add_argument('-k', help='-k argument help', nargs=3)
arguments = parser.parse_args()

return arguments

def assign_arg():
args = args_options()

if args.s or args.k:
variable1 = args[1] # this is where I'm stuck as I know this won't work
variable2 = args[2] # ^

从上面,我试图检查 arg.s 或 arg.k 是否为真,如果是,则将任一参数列表中的第二个和第三个属性分配给变量。

可以用python做到这一点吗?或者我需要做什么;
if arg.s:
variable1 = arg.s[1]
variable2 = arg.s[2]
elif arg.k:
variable1 = arg.k[1]
variable2 = arg.k[2]

上面的方法可行,但我有很多选项/属性,因此代码可能会很长。想问问是否有办法通过在多参数选项列表中查找属性并将其分配给变量来更有效地做到这一点。

最佳答案

使用各种输入运行解析器,并查看结果:

In [108]: def args_options(argv=None):
...: parser = argparse.ArgumentParser()
...: parser.add_argument('-s', help='-s argument help', nargs=3)
...: parser.add_argument('-k', help='-k argument help', nargs=3)
...: arguments = parser.parse_args(argv)
...: return arguments
...:

没有参数 - 两者 args.kargs.sNone .
In [109]: args_options([])
Out[109]: Namespace(k=None, s=None)

-s和正确数量的参数, args.s是 3 个字符串的列表。
In [110]: args_options(['-s','1','2','3'])
Out[110]: Namespace(k=None, s=['1', '2', '3'])
-k没有参数 - 错误
In [111]: args_options(['-s','1','2','3', '-k'])
usage: ipython3 [-h] [-s S S S] [-k K K K]
ipython3: error: argument -k: expected 3 arguments
An exception has occurred, use %tb to see the full traceback.

SystemExit: 2



In [112]: args_options(['-s','1','2','3', '-k','4','5','6'])
Out[112]: Namespace(k=['4', '5', '6'], s=['1', '2', '3'])

k 和 s - 都是 3 个元素列表

我们可以做的测试示例:
In [113]: args=args_options(['-k','1','2','3'])
In [114]: args.s is None
Out[114]: True
In [115]: args.k is None
Out[115]: False
In [116]: a,b,c = args.k # unpack to variables
In [117]: a
Out[117]: '1'
In [118]: b
Out[118]: '2'
In [119]: c
Out[119]: '3'

列表的索引访问也有效: args.k[2] vars(args)args 创建字典对象,但我认为这不会使访问变得更容易。

大消息-打印 args看看你的解析器产生了什么。一次又一次地这样做,直到你明白它在做什么以及为什么。

你可以给 -k default=[] , 在生产
In [123]: args=args_options(['-s','1','2','3'])
In [124]: args
Out[124]: Namespace(k=[], s=['1', '2', '3'])

你可以定义一个 dest对于两者,并以 args 属性中的值结束;
parser.add_argument('-k', '--ko', dest='something', default=[], nargs=3)

关于python - 将变量分配给多个 argparse 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007318/

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