如何避免在 python 中使用特定的可选参数
How to avoid use of a particular optional parameter in python
大家好,我正在 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
所以下面的操作应该抛出错误
python test.py -r
我没有人单独使用 -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 命令时,最好有一些默认值,这样你就很少遇到错误 "option XYZ is missing"。
所以,我想,这是 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
大家好,我正在 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 所以下面的操作应该抛出错误
python test.py -r
我没有人单独使用 -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 命令时,最好有一些默认值,这样你就很少遇到错误 "option XYZ is missing"。
所以,我想,这是 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