Da ich Fabric verwendete und viele Aufgaben für meine eigenen Zwecke hatte, wollte ich ausgeben, welche Aufgaben ausgeführt werden sollten und welche Aufgaben vor und nach der Ausführung der Aufgaben ausgeführt wurden. Daher habe ich eine CustomTask-Klasse erstellt.
report.py
# -*- coding: utf-8 -*-
import logging
import time
from fabric.tasks import Task
from fabric.operations import *
from fabric.colors import *
class ReportStatus(Task):
"""
CustomTask-Klasse, die Ihnen mitteilt, dass die Aufgabe ausgeführt werden soll und dass sie vor und nach der Ausführung der Aufgabe ausgeführt wurde.
@task(task_class=ReportStatus, task_name="Test vor und nach der Ausführung anzeigen")
def something_task():
print green("Aufgabenausführung")
"""
def __init__(self, func, task_name, *args, **kwargs):
super(ReportStatus, self).__init__(*args, **kwargs)
self.func = func
self.task_name = task_name
if hasattr(func, '__doc__') and func.__doc__:
self.__doc__ = func.__doc__
else:
self.__doc__ = task_name
if hasattr(callable, '__module__'):
self.__module__ = callable.__module__
def run(self, *args, **kwargs):
print cyan("[%s] [%s]Laufen" % (self.task_name, self.func.__name__))
logging.info("[%s][%s] executing" % (self.func.__name__, self.task_name))
result = self.func(*args, **kwargs)
print green("[%s] [%s]Abgeschlossen" % (self.task_name, self.func.__name__), bold=True)
logging.info("[%s][%s] done" % (self.func.__name__, self.task_name))
print "\n"
return result
def __call__(self, *args, **kwargs):
return self.run(*args, **kwargs)
def __getattr__(self, k):
return getattr(self.func, k)
def __details__(self):
return get_task_details(self.func)
Da die Protokollierung auch zum Ausspucken von Protokollen verwendet wird, wird bei entsprechender Einstellung auch das Protokoll ausgegeben.
fabfile.py
# -*- coding: utf-8 -*-
import datetime
import logging
from fabric.colors import *
from fabric.api import *
from report import ReportStatus
log_file_name = "%s.log" % (datetime.datetime.today().strftime("%Y%m%d"))
logging.basicConfig(
format='[%(asctime)s][%(levelname)s] %(message)s',
filename=log_file_name, datefmt='%Y/%m/%d %I:%M:%S',
level=logging.INFO
)
@task(task_class=ReportStatus, task_name="Test vor und nach der Ausführung anzeigen")
def something_task():
print green("Aufgabenausführung")
Wenn es ausgeführt wird, sieht es so aus.
Das Protokoll wird im angegebenen Format ausgegeben
[2017/01/19 01:20:18][INFO] [something_task][Test vor und nach der Ausführung anzeigen] executing
[2017/01/19 01:20:18][INFO] [something_task][Test vor und nach der Ausführung anzeigen] done
Recommended Posts