如何避免在python中使用特定的可选参数

时间:2015-03-02 14:33:36

标签: python argparse

大家好我正在创建python中的帮助菜单.Below是代码。

__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

3 个答案:

答案 0 :(得分:2)

如果他们总是要指定-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")

答案 1 :(得分:0)

我在argparse模块中没有看到这样的函数,但是当你创建shell命令时,最好有一些默认值,这样你就很少遇到错误“选项XYZ缺失”。

所以,我想,这是argparse没有涵盖的内容,如果你需要,必须由你处理。

或者,如果可能的话,我会假设-g,-a,-d的默认值,并且当两者都没有设置时使用它。当然,在这种情况下,您还必须进行一些处理,因为所有选项都设置为false。

答案 2 :(得分:0)

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