如果选择了特定选项,则需要附加选项的argpase

2024-09-29 22:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经阅读了许多关于这个问题的帮助链接,但没有一个是完全像我的情况,所以我决定张贴在这里。我使用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'

我需要它做的是,如果从参数模式旗帜。这是我目前尝试的,但错误总是被触发

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

谢谢你引起我的注意


Tags: inaddparserifismodetyperequired
1条回答
网友
1楼 · 发布于 2024-09-29 22:34:14

完成的工作代码

def get_args():
    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']:
        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 == '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 == 'delID':
        if args.delete is None:
            parser.error('The delete (-d) option is required when delID mode is selected')

    start = args.start
    end = args.end
    mode = args.mode
    event = args.delete

    return start,end,mode,event

相关问题 更多 >

    热门问题