In click
application from Context
we can get command name, its full path and parsed parameters like below. Can we get unparsed parameters from click
?
Edit: updated question according to @julaine and @Marco Parola comments
abc script contents:
#!/home/user/.bin/python-tools/venv/bin/python3
import sys
import click
@click.group("abc")
def abc():
"""ABC Help"""
pass
@abc.command("test")
@click.option("-o", "--option")
@click.option("-o2", "--option2", default="two")
def test(option, option2):
"""Get command CLI info"""
ctx = click.get_current_context()
print("Command name:", ctx.info_name)
print("Command path:", ctx.command_path)
print("Command params:", ctx.params)
print("CLI args with Click:", "???")
# Try it with click.Context.args
print("\nCommand leftover args:", ctx.args)
# Try it with sys.argv
cmd_path = click.get_current_context().command_path.split()
cli_args = sys.argv[len(cmd_path):]
print("CLI args with sys.argv:", " ".join(cli_args))
if __name__ == "__main__":
abc()
We get in responce:
❯ abc test -o 1
Command name: test
Command path: abc test
Command params: {'option': '1', 'option2': 'two'}
CLI args with Click: ???
Command leftover args: []
CLI args with sys.argv: -o 1
Can one get unparsed parameters from click
itself, i.e. without sys.argv
? In the example above it should return:
CLI args with Click: -o 1
In
click
, you can obtain the unparsed CLI arguments using the args attribute of theclick.Context
. And it returns you a list.