我正在写一个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")
答案 0 :(得分:1)
store_true
是store_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
将这些值分配给a
和b
属性
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
课程设置b
和Action
,如此问题所示:
答案 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>