如何避免在python中使用特定的可选参数
问题描述:
嗨,我正在创建帮助菜单在Python中.Below是代码。如何避免在python中使用特定的可选参数
__author__ = 'akthakur'
import argparse
import database_helper
import sys
import database_operations_full
import withoutTransactionaldata
print("Database Backup and restoration Application".center(60,'*'))
parser = argparse.ArgumentParser(description="My database backup application")
group = parser.add_mutually_exclusive_group()
group.add_argument("-g","--group",type=str,help="defines database groups",default='nothing')
group.add_argument("-a","--all",help="backup all databases",action="store_true")
group.add_argument("-d","--databases",nargs='+',help="take multiple databases as input",default=[])
parser.add_argument("-r","--reference",help="backups reference data-only",action="store_true")
Python文件的
假设名字我上面写的代码是test.py 所以以下的操作应该抛出错误
蟒蛇test.py -r
我不向任何人如果必须使用-r选项,则必须使用-a或-d或-g
答
如果他们总是必须指定-a,-d, - 之一, g然后用add_mutually_exclusive_group(required=True)
如果他们仅仅需要做的,当他们指定-r,你需要一个if语句,如:
args = parser.parse_args()
if args.reference:
if not args.databases and not args.all and args.group == 'nothing':
parser.error("Must specify -a, -d, or -g with -r")
答
我没有看到argparse模块中这样的功能,但是当你创建shell命令,最好有一些默认设置,这样你很少遇到错误“选项XYZ丢失”。
所以,我想,那是不是由argparse覆盖,并且必须由您处理,如果你想要它。
或者,如果可能的话,我会假定-g,-a,-d的默认值,并且在两者均未设置时使用该值。当然,在这种情况下,您还需要进行一些处理,因为所有选项都设置为false。
答
import argparse, sys
def db_prog(*args):
""" stub code """
print sys.argv[1:]
parser = argparse.ArgumentParser(description="myD")
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("-g")
group.add_argument("-a")
group.add_argument("-d")
parser.add_argument("-r", help="additionally must use one of -g, -a, -d")
args = parser.parse_args()
db_prog(sys.argv)
1趟
$ python argtest.py -a A
['-a', 'A']
运行2
$ python argtest.py -r R
usage: argtest.py [-h] (-g G | -a A | -d D) [-r R]
argtest.py: error: one of the arguments -g -a -d is required
运行3
$ python argtest.py -r R -g G
['-r', 'R', '-g', 'G']
运行4
$ python argtest.py -a A -g F -d D
usage: argtest.py [-h] (-g G | -a A | -d D) [-r R]
argtest.py: error: argument -g: not allowed with argument -a
你能提供你正在寻找什么样的例子吗?你的描述有点不清楚。 – 2015-03-02 14:37:39
@斯科特我已经编辑了描述,现在希望它现在更清楚。 – thinkingmonster 2015-03-02 14:45:01