我可以向 pyinvoke 任务添加条件“前置”任务吗?

mrh*_*997 6 python pyinvoke

pyinvoke支持所谓的“预”任务,必须在运行任务之前执行:

@task(pre=[required_precondition])
def mytask(c, param1=False):
    pass
Run Code Online (Sandbox Code Playgroud)

是否可以向“pre”任务添加一个条件(即仅当 param1 为 True 时才运行“required_precondition”)?

小智 4

据我所知,前置条件和后置条件是在“编译时”创建的,这意味着它们无权访问参数。或者,它是完美的一部分,但您可以利用以下事实:您可以从另一个任务调用一个任务(文档中未对此进行解释)来手动执行任务前条件。

from invoke import Collection, task

@task
def hello(c):
    print("hello")

@task
def goodbye(c, a=False):
    if a:
        col = Collection()
        col.add_task(hello)
        col['hello'](c)

    print('goodbye')
Run Code Online (Sandbox Code Playgroud)

输出

> invoke goodbye
goodbye

> invoke goodbye -a
hello
goodbye

Run Code Online (Sandbox Code Playgroud)

它确实感觉“hacky”,但据我所知,这是更简单的方法。

注意:如果出于任何原因您的任务已经是 anamespacens变量的一部分,则无需创建新集合,只需从命名空间本身调用它们,如下所示 namespace['hello'](c)