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”,但据我所知,这是更简单的方法。
注意:如果出于任何原因您的任务已经是 anamespace或ns变量的一部分,则无需创建新集合,只需从命名空间本身调用它们,如下所示
namespace['hello'](c)
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |