When using click
I know how to define a multiple choice option. I also know how to set an option as a required one. But, how can I indicate that an option B
is required only if the value of option A
is foo
?
Here's an example:
import click
@click.command()
@click.option('--output',
type=click.Choice(['stdout', 'file']), default='stdout')
@click.option('--filename', type=click.STRING)
def main(output, filename):
print("output: " + output)
if output == 'file':
if filename is None:
print("filename must be provided!")
else:
print("filename: " + str(filename))
if __name__ == "__main__":
main()
If the output
option is stdout
, then filename
is not needed. However, if the user chooses output
to be file
, then the other option filename
must be provided. Is this pattern supported by click?
At the beginning of the function I can add something like:
if output == 'file' and filename is None:
raise ValueError('When output is "file", a filename must be provided')
But I am interested whether there's a nicer/cleaner solution.