This question is about the click package: I want to setup my command so that some optional options are dependent on a specific option value and are required based on its value. Required options: input (input file) doe (integer , represents algo name) Sub options: if doe is equal to 1 then option generator_string should become required=True equal to 2 then option number_of_sample_pointsshould become required=True equal to 3 then option number_of_center_pointsshould become required=True Valid Examples: --input ./input.txt --doe 1 --generator_string 1234 --input ./input.txt --doe 2 --number_of_sample_points 3 --input ./input.txt --doe 3 --number_of_center_points 2 CODE: import click def check_output(ctx, param, value): if value == 1: if not ctx.params['generator_string']: setOptionAsRequired(ctx, 'generator_string') return value def setOptionAsRequired(ctx, name): for p in ctx.command.params: if isinstance(p, click.Option) and p.name == name: p.required = True @click.option('--input', required=True, type=click.Path(exists=True) ) @click.option('--doe', required=True, type=int, callback=check_output ) @click.option('--generator_string', required=False, type=str, is_eager=True) @click.option('--number_of_sample_points', required=False, type=int, is_eager=True) @click.option('--number_of_center_points', required=False, type=int, is_eager=True) @click.command(context_settings=dict(max_content_width=800)) def main(input, doe, generator_string, number_of_sample_points, number_of_center_points): click.echo('is valid command') if __name__ == '__main__': main() Continue reading...