python隐式调用方法_隐式调用python Fabric启动时的任务/函数吗?

There are a few environment variables I need to set in Fabric each invocation and so far I'm doing something like:

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

Firstly, I would like to provide a better mechanism of auto setting FOO if neither 'one' or 'two' is invoked. Perhaps there's some implicit "set-up" task or method that is invoked every Fabric run?

Also, there are actually more FOO settings (10 in total), is there a generic task/method called when a task isn't found? Something like a catch-all like:

def catchall(name, *args, **kwargs):

if name in ['one', 'two', ...]:

env['FOO'] = name

解决方案

You can make your task a subclass of a custom class with certain attributes that are passed as parameters:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值