argparse 存储到多个目的地

argparse store to multiple destination

我正在编写 Python 脚本。我有两个具有一些默认值的变量。我想传递一个参数并将它们设置为特殊值。

我可以直接使用 argparse 吗?

我当前的代码:

import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-s', help="set special values", action='store_true')
args = ap.parse_args()
if args.s:
    # special
    args.a = 100
    args.b = 100
else:
    # default
    args.a = 10
    args.b = 10
print(vars(args))

我想做这样的事情:

ap.add_argument("-s", 
                action="store_const",
                dest=["a", "b"],
                const=[100,100],
                default=[10,10],
                help="set special values")

From the doc,它说 action='store_true' 会将您的变量设置为 True。不是另一个值。 :)

好吧,这是一种方法...

import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-s', type=int, default=None, help="set special values")
args = ap.parse_args()
if args.s:
    # special
    args.a = args.s
    args.b = args.s * 10
else:
    # default
    args.a = 10
    args.b = 10
print(vars(args))

由于代码非常简单,并且与您的代码几乎相同,如果您有问题,请提问。 :)

此代码将输出...

a = 10 且 b = 10,或 a =,且 b =<此值的 10 倍>。

用法:python <your_file.py> -s=<your_number>

store_truestore_const 的子 class。可以改用:

In [309]: ap = argparse.ArgumentParser()
In [310]: ap.add_argument('-s',action='store_const',default=(10,10),
     const=(100, 100));

然后 args.s 将被设置为一个元组或另一个:

In [317]: ap.parse_args([])
Out[317]: Namespace(s=(10, 10))
In [318]: ap.parse_args(['-s'])
Out[318]: Namespace(s=(100, 100))

您还可以使用 unpacking 将这些值分配给 ab 属性

In [319]: args = ap.parse_args(['-s'])
In [320]: args.a, args.b = args.s
In [321]: args
Out[321]: Namespace(a=100, b=100, s=(100, 100))

您还可以使用自定义 Action class 设置 ab,如以下问题所示:

Python `argparse`: Is there a clean way to add a flag that sets multiple flags (e.g. `--all`" is equivalent to `--x --y`)