我已经阅读了很多关于这个问题的帮助链接,但没有一个像我的情况一样,所以我决定在这里发帖。我正在使用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!")
感谢您引起我的注意
答案 0 :(得分:0)
已完成的工作代码
-1