python - argparse 可以将位置参数与命名参数相关联吗?

标签 python argparse

我想将位置参数与它们出现时存在的“参数状态”相关联。例如,以下命令行:

script.py -m 1 foo -r 2 bar -r 7 baz -m 6 quux

应该产生以下关联:

foo:  m=1, r=0 (default value for r)
bar:  m=1, r=2
baz:  m=1, r=7
quux: m=6, r=7

这可以用 argparse 模块来完成吗?

最佳答案

这可能对您没有用,但如果您可以将 sys.argv 分解成多个部分,这个问题似乎会变得最简单 -- 本质上,您需要能够弄清楚哪些部分应该是成为“位置”论点(它们实际上不是位置的,因为正如您所说,它们可以出现在任何地方)以及哪些部分应该是某种论点。在下面的示例中,我已将其设置为与您的示例一起使用,但您也可以轻松地将 sys.argv 拆分为文件——或某种文件。 condition 函数由您编写。其余部分(希望)是不言自明的。

import argparse
import sys
import copy
import os

def split_list(lst,condition):
    current=[]
    out=[current]
    for arg in lst:
        current.append(arg)
        if(condition(arg)):
            current=[]
            out.append(current)

    return out


parser=argparse.ArgumentParser()
parser.add_argument('-m',action='store')
parser.add_argument('-r',default='0',action='store')
#pieces=split_list(sys.argv[1:],os.path.isfile)
pieces=split_list(sys.argv[1:],lambda x: x in ('foo','bar','baz','quux'))
options={} #use collections.OrderedDict if order matters -- or some more suitable data structure.
default=argparse.Namespace()
for args in pieces:
    if(not args):
        continue
    ns=copy.deepcopy(default)
    default=parser.parse_args(args[:-1],namespace=ns)
    options[args[-1]]=default

print (options)

关于python - argparse 可以将位置参数与命名参数相关联吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11276501/

相关文章:

python - 如何列出您在谷歌 Protocol Buffer 中定义的属性?

Python argparse : how to control line wrapping in help screen for subparsers?

python - Pytest 是一种类型的实例

python - np 数组是不可变的 - "assignment destination is read-only"

python - 如何使用 matplotlib 打印摄氏符号?

python - 如何从命名空间中删除参数

列表中的 Python 列表

python - 将 Python .txt 文件保存到用户桌面而不在代码中说明我的用户名

python - 有什么方法可以指示 argparse (Python 2.7) 从 sys.argv 中删除找到的参数?

python - 在 Python 中结合使用 argparse 和 sys.argv