更改必需参数的数量取决于选项(argparse)

时间:2015-02-16 13:50:29

标签: python argparse

我想使用argparse简单的命令行:

usage: downtime [-h] [-d] [-l | -f] [-s] host duration

positional arguments:
  host            Host to schedule. Local fqdn used if not specified.
  duration        Duration of downtime (minutes), 15 if not specified

optional arguments:
  -h, --help      show this help message and exit
  -d, --debug     Print debug info
  -l, --flexible  Use f_L_exible downtime (used by default)
  -f, --fixed     Use _F_ixed downtime

我想添加'-s' - 'show'选项:

foobar -s host
   -s           Show info for host

如果有“-s”开关,我无法想办法说argparse'改变位置参数的含义。或者至少使'数字'可选。

我怎么能这样做,或者argparse不可能这样做?感谢。

代码:

p = argparse.ArgumentParser()
p.add_argument('host', help = "Host to schedule. Local fqdn used if not specified.", nargs = '?'  default=alias)
p.add_argument('duration', type = int, help = 'Duration of downtime (minutes), 15 if not specified', default=15)
p.add_argument('-d', '--debug', action='store_true', help = 'Print debug info')
g = p.add_mutually_exclusive_group()
g.add_argument('-l', '--flexible', help = "Use f_L_exible downtime (used by default)", action='store_true')
g.add_argument('-f', '--fixed', help = 'Use _F_ixed downtime', action="store_false")
mode2 = p.add_argument_group('show')
mode2.add_argument('-s', '--show', help = 'show downtimes for host', action="store_true")
args = p.parse_args()

1 个答案:

答案 0 :(得分:0)

nargs='?'添加到持续时间:

p.add_argument('duration', type = int, nargs='?', help = 'Duration of downtime (minutes), 15 if not specified', default=15)

将使用情况更改为:

usage: downtime [-h] [-d] [-l | -f] [-s] host [duration]

通过此更改,duration始终是可选的。在它被要求之前,'default = 15'什么也没做。现在默认意味着什么。

看起来总是需要host。这是一件好事,因为不止一个“可选”的位置使事情变得复杂(这是可能的,但更棘手)。

-s用于:

if args.s:
    print_show(args.host)
    # ignore args.duration regardless of whether it is default or not
    # or object if args.duration  is not its default value
else:
    <do something else with args.host and args.duration>