装饰器
fabfile 中可以方便使用的装饰器。
fabric.decorators.
hosts
(*host_list)该装饰器用于指定被装饰的函数执行在那台主机或哪些主机列表上。
例如:如果不在控制台覆盖相关参数的话,将会在
host1
、host2
以及host3
上执行my_func
,并且在host1
和host3
上都指定了登录用户。@hosts('user1@host1', 'host2', 'user2@host3') def my_func(): pass
hosts
接受 host 的参数列表(@hosts('host1')
,@hosts('host1', 'host2')
)或者一个 hosts 可迭代对象(@hosts(['host1', 'host2'])
)。要注意,这个装饰器仅仅会设置函数的
.hosts
属性,which is then read prior to executing the function.在 0.9.2 版更改: 可以接收一个可迭代对象作为唯一参数(
@hosts(iterable)
),不再要求这样写:@hosts(*iterable)
。
fabric.decorators.
parallel
(pool_size=None)强制被装饰的函数并行执行而非同步执行。
该装饰器的优先级高于全局变量 env.parallel。如果函数还装饰了
serial
的话,依旧是它的优先级更高。1.3 新版功能.
fabric.decorators.
roles
(*role_list)该装饰器用于定义(服务器)“角色”名,然后用于寻找对应的主机列表。
角色是定义在
env
中的键,其对应的值是一个或多个主机连接字符穿的列表。例如:不考虑控制台参数覆盖的话,my_func
将会在webserver
和dbserver
角色对应的主机列表上执行:env.roledefs.update({ 'webserver': ['www1', 'www2'], 'dbserver': ['db1'] }) @roles('webserver', 'dbserver') def my_func(): pass
和
hosts
一样,roles
也接受参数列表,或者单个可迭代对象作为参数,其实现机制是设置<function>.roles
,同样类似于hosts
。在 0.9.2 版更改: (和
hosts
一样)支持可迭代对象作为唯一参数。
fabric.decorators.
runs_once
(func)阻止函数多次执行的装饰器。
通过保存内部状态,使用该装饰器可以保证函数在每个 Python 解释器中只运行一次,通常在使用时它的作用都是“每个
fab
程序生命周期中只运行一次”。任何被该装饰器装饰的函数在第二次、第三次……第 n 次执行时都会静默失败,并返回初次运行的结果。
注解
runs_once
无法和任务并行执行同时生效。
fabric.decorators.
serial
(func)强制被装饰的函数顺序执行,不并行执行。
该装饰器效果的优先级高于全局变量 env.parallel。如果任务同时被
serial
和parallel
装饰器装饰,parallel
的优先级更高。1.3 新版功能.
fabric.decorators.
task
(*args, **kwargs)将函数封装为新式任务的装饰器。
可以作为简单的、无参数的装饰器使用(
@task
这样),也可以使用参数修订其行为(比如:@task(alias='myalias')
)。关于 new-style task 装饰器的使用请参见其文档。
在 1.2 版更改: 新增关键字参数
alias
、aliases
、task_class
和default
。详情参见 参数。在 1.5 版更改: 新增关键字参数
name
。参见
~fabric.docs.unwrap_tasks`、
WrappedCallableTask
fabric.decorators.
with_settings
(*arg_settings, **kw_settings)一个装饰器,作用等价于
fabric.context_managers.settings
。将整个函数封装起来,其效果类似于执行在
settings
上下文管理器中。如果你想要修改函数的设置,但不愿改动其缩进时,它会很有用。例如:将整个任务函数中的退出(abort)转换为警告:
@with_settings(warn_only=True) def foo(): ...
参见
settings
1.1 新版功能.