如何同时为Get和Set使用一个命令参数?

时间:2019-06-14 18:43:49

标签: python argparse

我正在尝试通过使用argparse来实现参数解析。我需要的是同时具有“获取”和“设置”命令的一个选项。在Python中有可能吗?

这就是我需要的-例如:

$ python prog.py -width
Width is 15 cm.
$ python prog.py -width=20
Width is set to 20 cm.

我尝试过。但是我找不到实现它的方法。我必须为选项使用2个不同的名称。一个是“ getwidth”,另一个是“ width”。这是我的代码:

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("-width", help="Set width")
parser.add_argument("-getwidth", action='store_true', help="Get width")

args = parser.parse_args()

if args.width:
    print("Set width to %s cm" % args.width)
if args.getwidth:
    print("Width is %s cm" % width_value)

这是我的代码的结果:

$ python ts.py -getwidth
Width is 21.0 cm
$ python ts.py -width=25
Set width to 25 cm

2 个答案:

答案 0 :(得分:4)

您可以使用nargs='?'进行此操作:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument(
    "-width",
    help="Set width",
    nargs='?',
    const='get',
)

args = parser.parse_args()

if args.width == 'get':
    print("Width is %s cm" % 1)
elif args.width is not None:
    print("Set width to %s cm" % args.width)

You can read about the nargs argument here.

答案 1 :(得分:0)

您可以这样做,以便将arg值0转换为默认值。像这样...

import  argparse

width_value = 5

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("-width",  help="Set width (0 = use default)")

args = parser.parse_args()
action = ""

if args.width != "0":
    width_value = int(args.width)
    action = "set to "

print("Width is %s%s cm" % (action, width_value))

提供输出...

$ python pyargs.py -width=11
Width is set to 11 cm

$ python pyargs.py -width=0
Width is 5 cm