3 回答
TA贡献2003条经验 获得超2个赞
将参数解析与您的需求分离。
parser.add_argument('--Type', choices=['a','b','c'], required=True)
parser.add_argument('--Input', action='store_true')
parser.add_argument('--Directory', action='store_true')
args = parser.parse_args()
if args.Directory and args.Type != 'c' and not args.input:
raise argparse.ArgumentError("--Directory requires --Type c and --Input")
(注意action='store_true'自动设置type=bool和default=False。)
TA贡献1810条经验 获得超5个赞
我不会将required参数用于这些事情中的任何一个,它有点容易出错并且不太可读。只需在解析后检查参数的有效性。
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--Type', type=str, choices=['a','b','c'], help='Options include: a,b,c.', required=True)
parser.add_argument('--Input', default=False, help='Generate input files', required=False)
parser.add_argument('--Directory', default=False, help='Secondary directory', required=False)
parsed_args = parser.parse_args()
if parsed_args.Directory and not (parsed_args.Input and parsed_args.Type == 'c'):
parser.error('option --Directory requires --Input and --Type c.')
TA贡献1834条经验 获得超8个赞
这不是最漂亮的,但您可以查看旁边的参数--Type并检查它是否等于'c'这样:
parser.add_argument('--Directory', default=False, help='secondary directory',
required=('--Type' in sys.argv and
sys.argv[sys.argv.index('--Type') + 1] == 'c')
)
添加回答
举报