2

ファブリック タスクでクリーンアップする方法 (たとえば、一時ファイルを削除するなど) に関する一般的な知恵はありますか? 通常どおりモジュールを使用すると、デコレータを使用して に渡された関数を装飾atexitできないため、問題が発生します。それともできますか?他のファブリック ユーザーはこれにどのように対処していますか?@rolesatexit.register()

4

1 に答える 1

5

私も同じ問題を抱えています。次のコードは理想的ではありませんが、現在このような実装があります。

fabfile.py

from functools import wraps
from fabric.network import needs_host
from fabric.api import run, env

def runs_final(func):
    @wraps(func)
    def decorated(*args, **kwargs):
        if env.host_string == env.all_hosts[-1]:
            return func(*args, **kwargs)
        else:
            return None
    return decorated

@needs_host
def hello():
    run('hostname')
    atexit()

@runs_final
def atexit():
    print ('this is at exit command.')

結果:

fabric$ fab hello -H web01,web02
>[web01] Executing task 'hello'
>[web01] run: hostname
>[web01] out: web01
>[web01] out: 
>[web02] Executing task 'hello'
>[web02] run: hostname
>[web02] out: web02
>[web02] out: 
>
>this is at exit command.
>
>Done.
于 2013-07-18T17:40:38.260 に答える