【问题标题】:Can I add a conditional "pre" task to a pyinvoke task?我可以向 pyinvoke 任务添加条件“预”任务吗?
【发布时间】:2020-01-21 20:33:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: pyinvoke


    【解决方案1】:

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

    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”,但据我所知,这是更简单的方法。

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

    【讨论】:

    • 除了创建一个集合,添加一个任务并调用它,还可以直接调用任务:“hello(c)”。但在这两种情况下,重复数据删除都不起作用,这是调用的重要部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多