Я не формулировал вопрос, чтобы полностью объяснить, что я пытался сделать, так как каждый шаг также требует вывода из предыдущего. Огромное спасибо Полу за то, что он направил меня по правильному пути.
Мое решение было что-то вроде:
@click.group(invoke_without_command=True)
@click.option('--arg1')
@click.option('--arg2')
@click.pass_context
def cli(ctx, arg1, arg2):
'''Description
'''
if ctx.invoked_subcommand is None:
do_everything(ctx, arg1, arg2)
@cli.command()
@click.option('--arg1')
def step_1(arg1):
return do_something(arg1)
@cli.command()
@click.argument('step_one_result')
@click.option('--arg2')
def step_2(step_one_result, arg2):
do_something_else(step_one_result, arg2)
def do_everything(ctx, arg1, arg2):
step_one_result = ctx.invoke(step_1, arg1=arg1)
ctx.invoke(do_something_else, step_one_result=step_one_result, arg2=arg2)
#and because of weirdness with pass_context and using setuptools
def main():
cli(obj={})
if __name__ == '__main__':
main()
РЕДАКТИРОВАТЬ: вы заметите использование ctx.invoke()
, которое было необходимо для вызова функций без получения следующей ошибки
line 619, in make_context
ctx = Context(self, info_name=info_name, parent=parent, **extra)
TypeError: __init__() got an unexpected keyword argument 'arg1'