argparse存储到多个目的地

时间:2018-03-12 12:34:50

标签: python argparse

我正在写一个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")

2 个答案:

答案 0 :(得分:1)

store_truestore_const的子类。这可以用来代替:

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))

您还可以使用自定义a课程设置bAction,如此问题所示:

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

答案 1 :(得分:0)

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>