gpt4 book ai didi

python - 如何使 python 的 argparse 接受任意数量的 [-R a b],并将它们聚合到一个列表中

转载 作者:行者123 更新时间:2023-12-01 04:58:50 29 4
gpt4 key购买 nike

我希望能够调用 foo.py -R a b -R c d -R e f并得到类似 [('a', 'b'), ('c', 'd'), ('e', 'f')] 的内容在一个变量中。我可以使用 foo.py -R a=b -R c=d -R e=f并手动进行分割,但我不想这样做,因为我正在围绕另一个程序构建一个包装器,并且想模仿它的命令行选项输入格式。

我尝试过以下方法:

#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser(description='Foo')
parser.add_argument('-R', metavar=('A', 'B'), dest='libnames', type=str, default=('.', 'Top'), nargs=2)

if __name__ == '__main__':
args = parser.parse_args()
print(args.libnames)

但后来我得到 ['e', 'f']当我将其称为foo.py -R a b -R c d -R e f时.

最佳答案

您可以使用自定义argparse.Action类。

https://docs.python.org/3/library/argparse.html#argparse.Action

import argparse

class Pairs(argparse.Action):
def __call__(self, parser, namespace, values, opts, **kwargs):
lst = getattr(namespace, self.dest)
if lst is None:
lst = []
setattr(namespace, self.dest, lst)
lst.append(tuple(values))

parser = argparse.ArgumentParser()
parser.add_argument('-R', nargs='+', dest='libnames', action=Pairs)
print parser.parse_args("-R a b -R c d -R e f".split())

输出:

Namespace(libnames=[('a', 'b'), ('c', 'd'), ('e', 'f')])

关于python - 如何使 python 的 argparse 接受任意数量的 [-R a b],并将它们聚合到一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768253/

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