python Fabric启动时隐式调用task/function?

2024-09-30 04:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

每次调用Fabric时,我都需要在Fabric中设置一些环境变量,到目前为止,我正在做一些类似的事情:

env['FOO'] = 'one'

@task
def one():
    env['FOO'] = 'one'
    print(cyan('Using FOO %s' % env['FOO']))

@task
def two():
    env['FOO'] = 'two'
    print(cyan('Using FOO %s' % env['FOO']))

@task
def run():
    with shell_env(FOO=env['FOO']):
    local(...)

# more tasks that have the same pattern as run() above

首先,如果没有调用'one'或'two',我想提供一个更好的自动设置FOO的机制。也许在每次结构运行时都会调用一些隐式的“设置”任务或方法?在

另外,实际上还有更多的FOO设置(总共10个),当找不到任务时是否有一个通用的任务/方法被调用?像是一个包罗万象的东西:

^{pr2}$

Tags: 方法runenvtaskfoodefwith环境变量
1条回答
网友
1楼 · 发布于 2024-09-30 04:28:27

可以使任务成为自定义类的子类,该类具有作为参数传递的某些属性:

from fabric.api import task
from fabric.tasks import Task

class CustomTask(Task):
    def __init__(self, func, *args, **kwargs):
        super(CustomTask, self).__init__(*args, **kwargs)
        self.func = func
        self.foo = "one"

    def run(self, *args, **kwargs):
        return self.func(self.foo, *args, **kwargs)

@task(task_class=CustomTask)
def one(foo):
    print(cyan('Using FOO %s' % foo))

相关问题 更多 >

    热门问题