如果选择了特定选项,argpase需要其他选项

时间:2016-02-10 17:23:11

标签: python argparse

我已经阅读了很多关于这个问题的帮助链接,但没有一个像我的情况一样,所以我决定在这里发帖。我正在使用argparse来获取一些命令行选项。我遇到的问题是始终需要1个标志(-m)所以我将其定义为

parser.add_argument('-m','--mode', type=str, required=True , metavar='<add|del|list|delID>', choices=['add', 'del' , 'list', 'delID'])

正如您所看到的,唯一可能接受的参数是'add','del','list'和delID'

如果从args.mode标志输入某个选项,我需要强制执行2个附加选项。这是我目前尝试的但总是被触发的错误

parser = argparse.ArgumentParser(description='Help Desk Calendar Tool')
parser.add_argument('-m','--mode', type=str, required=True , metavar='<add|del|list|delID>', choices=['add', 'del' , 'list', 'delID'])
parser.add_argument('-s', '--start', type=str, required=False, metavar='<Start date in the following format - YYYY-MM-DD>')
parser.add_argument('-e','--end', type=str, required=False, metavar='<End date in the following format - YYYY-MM-DD>')
parser.add_argument('-d','--delete', type=str, required=False, metavar='<Event ID Here>')

args = parser.parse_args()

if args.mode in ('add','del','list'):
    print args.mode
    if args.start is None or args.end is None:
        parser.error('Options add, del and list all require the start (-s) and end (-e) date to be set')

if args.mode in ('delID'):
    if args.start is not None or args.end is not None:
        parser.error('The option delID can ONLY except the event ID, no other options can be entered')

if args.mode in ('delID'):
    if args.delete is None:
        parser.error('The delete (-d) option is required when delID mode is selected')

因此,如果我运行command.py -s 2016-02-11 -e 2016-02-16 -m add,则仍会触发第一个错误条件。 现在它确实适用于delID条件检查。有什么建议吗?

由于

更新

看起来上面确实有效。结果我在我的定义中有一个额外的错误检查,即抛出错误

    if mode in ('add','del','list'):
        parser.error("Options add,del and list all require a start (-s) and end (-e) date!")

感谢您引起我的注意

1 个答案:

答案 0 :(得分:0)

已完成的工作代码

-1