gpt4 book ai didi

python - 我可以有一个 main() Click 函数来调用所有其他子命令吗?

转载 作者:行者123 更新时间:2023-11-30 22:14:59 25 4
gpt4 key购买 nike

我有一个像这样的脚本:

#myscript.py
import click

def step1(arg1):
print('Step 1: ' + arg1)

def step2(arg2):
print('Step 2: ' + arg2)

def main(arg1, arg2):
step1(arg1)
step2(arg2)

大多数时候我想使用myscript arg1 arg2运行脚本,但有时我可能只想运行一个步骤:例如myscript step1 arg1如何设置点击来执行此操作?有没有一种方法可以使用一个默认命令,然后使用其他可选命令?

这似乎是 Click discourages一件事 :

Sometimes, it might be interesting to invoke one command from another command. This is a pattern that is generally discouraged with Click, but possible nonetheless.

我需要使用此 click.invoke() 模式吗?

最佳答案

我认为Multi Command ChainingMulti Command Pipelines功能旨在解决这种情况。管道提供了所请求的确切行为(当命令行上没有给出任何内容时调用 step1step2),但它更详细,并且使用 chain=True 没有一个参数是可选的;您必须 (a) 始终同时给出 arg1arg2,即使仅调用 step2 时也是如此;或 (b) 将这些参数转换为选项(--arg1 foo 而不是 foo)。

链接

import click

@click.group(chain=True)
def cli():
pass

@cli.command()
@click.argument('arg1')
def step1(arg1):
click.echo('Step 1: ' + arg1)

@cli.command()
@click.argument('arg2')
def step2(arg2):
click.echo('Step 2: ' + arg2)

cli()

然后:

$ python3 chain.py step1 foo step2 bar
Step 1: foo
Step 2: bar
$ python3 chain.py step2 bar
Step 2: bar

流水线

import click

@click.group(chain=True, invoke_without_command=True)
@click.argument('arg1')
@click.argument('arg2')
def cli(arg1, arg2):
pass

@cli.resultcallback()
def process_pipeline(processors, **kwargs):
# If no commands given, invoke step1 then step2
processors = processors if len(processors) else [step1, step2]
for processor in processors:
processor(**kwargs)

def step1(**kwargs):
click.echo('Step 1: ' + kwargs['arg1'])

def step2(**kwargs):
click.echo('Step 2: ' + kwargs['arg2'])

@cli.command('step1')
def make_step1():
return step1

@cli.command('step2')
def make_step2():
return step2

cli()

然后

$ python3 pipeline.py foo bar
Step 1: foo
Step 2: bar
$ python3 pipeline.py foo bar step2
Step 2: bar

关于python - 我可以有一个 main() Click 函数来调用所有其他子命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50375465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com