【问题标题】:Python Fabric custom decoratorPython Fabric 自定义装饰器
【发布时间】:2013-11-29 15:44:50
【问题描述】:

我正在使用 Fabric 1.8 编写几个任务

由于它们中的大多数都非常相似,因此我想执行以下操作:

# Decorator for installation task
def install_task(test_task):
    def impl(install):
        def wrapper(*args, **kwargs):
            if not test_task():
                install()
            return test_task()
        return wrapper
    return impl

# Decorator for test task
def test_task(expected):
    def impl(test):
        def wrapper(*args, **kwargs):
            return expected in test()
        return wrapper
    return impl

# JAVA
@test_task('java version "1.7')
def test_java():
    return run('java -version')

@install_task(test_java)
def install_java():
    with sudo('apt-get purge openjdk*'):
        with sudo('apt-get install software-properties-common'):
            with sudo('add-apt-repository ppa:webupd8team/java'):
                with sudo('apt-get update'):
                    sudo('apt-get install oracle-java7-installer')

但是当我尝试运行任务时,我得到:

Available commands:

    wrapper

Fabric 是否与自定义参数装饰器兼容?

【问题讨论】:

    标签: python parameters decorator fabric


    【解决方案1】:

    你需要使用 python functools.wraps 来包装你的装饰器函数。看看这个similar question

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 2020-09-04
      • 2020-07-11
      • 2018-06-05
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多