2015-03-02 67 views
1

嗨,我正在創建幫助菜單在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

+1

你能提供你正在尋找什麼樣的例子嗎?你的描述有點不清楚。 – 2015-03-02 14:37:39

+0

@斯科特我已經編輯了描述,現在希望它現在更清楚。 – thinkingmonster 2015-03-02 14:45:01

回答

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") 
0

我沒有看到argparse模塊中這樣的功能,但是當你創建shell命令,最好有一些默認設置,這樣你很少遇到錯誤「選項XYZ丟失」。

所以,我想,那是不是由argparse覆蓋,並且必須由您處理,如果你想要它。

或者,如果可能的話,我會假定-g,-a,-d的默認值,並且在兩者均未設置時使用該值。當然,在這種情況下,您還需要進行一些處理,因爲所有選項都設置爲false。

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