Skip to main content

装饰

便利装饰用于fabfiles。

fabric.decorators.hosts(*host_list)

装饰器定义要对其执行包装函数的主机或主机。

例如,以下将确保,除非在命令行上覆盖,my_func 将在 host1host2host3 上运行,并且与特定用户在 host1host3 上运行:

@hosts('user1@host1', 'host2', 'user2@host3')
def my_func():
    pass

hosts 可以用参数列表(@hosts('host1')@hosts('host1', 'host2'))或单个可迭代参数(@hosts(['host1', 'host2']))来调用。

注意,这个装饰器实际上只是设置函数的 .hosts 属性,然后在执行该函数之前读取它。

在 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 将针对 webserverdbserver 角色中列出的主机执行:

env.roledefs.update({
    'webserver': ['www1', 'www2'],
    'dbserver': ['db1']
})

@roles('webserver', 'dbserver')
def my_func():
    pass

hosts 一样,可以使用参数列表或单个可迭代参数来调用 roles。类似地,这个装饰器使用与 hosts 相同的机制,并且简单地设置 <function>.roles

在 0.9.2 版更改: 允许使用单个可迭代参数(与 hosts 相同)。

fabric.decorators.runs_once(func)

装饰器防止包装函数运行不止一次。

通过保持内部状态,这个装饰器允许你标记一个函数,这样它只会在每个Python解释器会话中运行一次,在典型的使用中意味着“每次调用 fab 程序一次”。

使用此装饰器包装的任何函数将默认无法执行第2,3,...,N次调用,并返回原始运行的值。

注解

runs_once 不适用于并行任务执行。

fabric.decorators.serial(func)

强制包装函数始终顺序运行,从不并行运行。

这个装饰器优先于 env.parallel 的全局值。然而,如果任务用 serial and parallelparallel 赢得。

1.3 新版功能.

fabric.decorators.task(*args, **kwargs)

装饰器声明包装函数是一个新式任务。

可以作为一个简单的无参数装饰器(即 @task)或自定义其行为的参数(例如 @task(alias='myalias'))来调用。

有关如何使用此装饰器的详细信息,请参阅 新式任务 文档。

在 1.2 版更改: 添加了 aliasaliasestask_classdefault 关键字参数。有关详细信息,请参阅 参数

在 1.5 版更改: 添加了 name 关键字参数。

fabric.decorators.with_settings(*arg_settings, **kw_settings)

装饰等同于 fabric.context_managers.settings

允许您包装整个函数,就像它在 settings 上下文管理器的块中调用一样。如果您想要将某个给定的设置应用于整个函数体,或者希望在不缩进所有内容的情况下改进旧代码,这可能会很有用。

例如,对于整个任务函数,将中止转换为警告:

@with_settings(warn_only=True)
def foo():
    ...

参见

settings

1.1 新版功能.