[PYTHON] Notifier le contenu de la tâche avant et après l'exécution de la tâche avec Fabric

Étant donné que j'utilisais Fabric et que j'avais beaucoup de tâches pour mes propres besoins, je voulais afficher les tâches à effectuer et les tâches exécutées avant et après l'exécution des tâches, j'ai donc créé une classe CustomTask.

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):
    """
Classe CustomTask qui vous indique que la tâche est sur le point d'être exécutée et qu'elle a été exécutée avant et après l'exécution de la tâche.

    @task(task_class=ReportStatus, task_name="Afficher le test avant et après l'exécution")
    def something_task():
        print green("Exécution des tâches")
    """
    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]Courir" % (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]Terminé" % (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)

J'utilise également la journalisation pour cracher le journal, donc si vous le définissez correctement, il produira également des journaux

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="Afficher le test avant et après l'exécution")
def something_task():
    print green("Exécution des tâches")

Une fois exécuté, cela ressemble à ceci.

Screen Shot 2017-01-19 at 01.21.02.png

le journal est émis dans le format spécifié

[2017/01/19 01:20:18][INFO] [something_task][Afficher le test avant et après l'exécution] executing
[2017/01/19 01:20:18][INFO] [something_task][Afficher le test avant et après l'exécution] done

Recommended Posts

Notifier le contenu de la tâche avant et après l'exécution de la tâche avec Fabric
Changer la couleur des erreurs et avertissements Fabric
Remplissez la valeur manquante (null) de DataFrame avec les valeurs avant et après avec pyspark
Ne pas être conscient du contenu des données en python
[Super facile! ] Comment afficher le contenu des dictionnaires et des listes incluant le japonais en Python
Définir une tâche pour définir l'environnement de fabric dans YAML
Supprimer les espaces pleine largeur avant et après la chaîne (python)
[Astuces] Problèmes et solutions dans le développement de python + kivy
Simulation du contenu du portefeuille
Obtenez des informations de l'Agence météorologique et informez Slack des avertissements météorologiques dans les 23 quartiers de Tokyo
Traitez le contenu du fichier dans l'ordre avec un script shell
Comptez bien le nombre de caractères thaïlandais et arabes en Python
[EC2] Comment installer Chrome et le contenu de chaque commande
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
Probabilité des prix les plus élevés et les plus bas des louveteaux à Atsumori
[TensorFlow 2] Comment vérifier le contenu de Tensor en mode graphique
Créez une fonction pour obtenir le contenu de la base de données dans Go
Vérifier le taux de compression et le temps de PIXZ utilisé en pratique
Obtenez le titre et la date de livraison de Yahoo! News en Python
J'ai essayé de faire la différence de Config avant et après le travail avec le script pyATS / Genie self-made
Si vous souhaitez changer d'utilisateur d'exécution au milieu d'une tâche Fabric, le gestionnaire de contexte des paramètres
Comment copier et coller le contenu d'une feuille au format JSON avec une feuille de calcul Google (en utilisant Google Colab)
L'histoire de Python et l'histoire de NaN
L'histoire de la participation à AtCoder
Comprendre le contenu du pipeline sklearn
Voir le contenu de Kumantic Segumantion
L'histoire du "trou" dans le fichier
Explication et implémentation du protocole XMPP utilisé dans Slack, HipChat et IRC
Graphique de l'historique du nombre de couches de deep learning et du changement de précision
Prédisez la quantité d'énergie utilisée en 2 jours et publiez-la au format CSV
Comparer la grammaire de base de Python et Go d'une manière facile à comprendre
Changer la saturation et la clarté des spécifications de couleur comme # ff000 dans python 2.5
Comment comparer si le contenu des objets dans scipy.sparse.csr_matrix est le même
Rechercher le nom et les données d'une variable libre dans un objet fonction
Ouvrez un fichier Excel en Python et coloriez la carte du Japon
Notifiez les nouveaux articles de l'organisation Qiita pour discuter et améliorer l'efficacité d'apprentissage de l'organisation!