首页 > 解决方案 > 我可以向 pyinvoke 任务添加条件“预”任务吗?

问题描述

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

@task(pre=[required_precondition])
def mytask(c, param1=False):
    pass

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

标签: pyinvoke

解决方案


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

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')

输出

> invoke goodbye
goodbye

> invoke goodbye -a
hello
goodbye

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

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


推荐阅读