【发布时间】:2020-01-21 20:33:33
【问题描述】:
pyinvoke 支持所谓的“预”任务,必须在运行任务之前执行:
@task(pre=[required_precondition])
def mytask(c, param1=False):
pass
是否可以向“pre”任务添加条件(即仅当 param1 为 True 时才运行“required_precondition”)?
【问题讨论】:
标签: 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”,但据我所知,这是更简单的方法。
注意:
如果出于某种原因您的任务已经是 namespace 或 ns 变量的一部分,
您不需要创建新集合,只需从命名空间本身调用它们,如
namespace['hello'](c)
【讨论】: