[python] option pour désactiver la sortie de click.progressbar

Lorsque vous utilisez l'application console en Python, l'utilisation de cliquez sur la barre de progression permet de visualiser la progression lorsque vous travaillez pendant une longue période.

Cependant, dans certains cas, lorsque vous placez une fonction de traitement qui utilisait à l'origine la barre de progression dans le processus serveur ou le traitement par lots, vous souhaiterez peut-être activer / désactiver la sortie de la barre de progression avec un argument facultatif.

Voici quelques modèles de code qui peuvent être utilisés dans de tels cas. => J'ai trouvé une technique pour spécifier / dev / null pour file, donc c'est la première ...

Utilisation simple dans le système UNIX

import sys
import click


def something(items, show_progress=False):
    out = sys.stdout if show_progress else open('/dev/null', 'wb')
    with click.progressbar(items, file=out) as bar:
        for item in bar:
            'abcd' * (1024 * 10)


items = list(xrange(10000))
something(items, show_progress=True)
print '--------'
something(items, show_progress=False)

Il semble que vous puissiez spécifier la destination de sortie de click.progressbar avec l'option file, donc si vous spécifiez un objet fichier à écrire dans / dev / null, rien ne sortira. Cependant, si vous appelez une fonction comme celle-ci «quelque chose» des milliers de fois, vous devez fermer l'objet fichier correctement ouvert.

Comment résoudre avec la technique Python qui peut être utilisée même dans un environnement sans / dev / null

import functools
from contextlib import contextmanager
import click


@contextmanager
def dummy_bar(items, **kwargs):
    yield items


def something(items, show_progress=False):
    f = click.progressbar if show_progress else dummy_bar
    fbar = functools.partial(f, items, show_pos=True, show_eta=True)

    with fbar() as bar:
        for item in bar:
            'abcd' * (1024 * 10)


items = list(xrange(10000))
something(items, show_progress=True)
print '--------'
something(items, show_progress=False)

Commentaire

J'ai défini une fonction appelée dummy_bar pour créer une barre qui ne produit rien. Puisque click.progressbar est appelé avec la clause with, il est assigné à la variable après ʻas en utilisant contextmanager, c'est-à-dire que l'itérable donné par l'argument est retourné tel quel avec yield`. ..

La fonction à utiliser est commutée avec l'option show_progress, et les arguments sont partiellement appliqués dans functools.partial afin qu'elle puisse être appelée uniformément sans arguments. Donc, là où il était à l'origine avec click.progressbar (..., c'est simplement avec fbar ().

Maintenant, la bar selon le comportement de l'option est assignée par ʻas, et le reste est ok si vous l'utilisez comme click.progressbar` normalement.

Recommended Posts

[python] option pour désactiver la sortie de click.progressbar
Je veux sortir le début du mois prochain avec Python
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
Sortie du nombre de cœurs de processeur en Python
Paramètre pour afficher le journal de l'exécution de cron
Comment effacer les caractères générés par Python
Sortie sous la forme d'un tableau python
le zen de Python
Bases de python: sortie
Un moyen simple de vérifier la source des modules Python
Le mur lors du passage du service Django de Python 2.7 à la série Python 3
Modèle de script python pour lire le contenu du fichier
Comment obtenir le nombre de chiffres en Python
[Python] Résumé de la façon de spécifier la couleur de la figure
14 quiz pour comprendre la portée étonnamment compliquée de Python
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
[Python] Comment afficher les valeurs de liste dans l'ordre
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Entièrement traduit le site du "Guide de l'auto-stoppeur de Python"
Note Python: Le mystère de l'attribution d'une variable à une variable
J'ai essayé de résumer les opérations de chaîne de Python
Sortie de la table spécifiée de la base de données Oracle en Python vers Excel pour chaque fichier
Vers la retraite de Python2
Désactivez l'avertissement d'infusion
Filtrer la sortie de tracemalloc
À propos des fonctionnalités de Python
Le pouvoir des pandas: Python
J'ai essayé de trouver l'entropie de l'image avec python
[Python] Modifier le contrôle du cache des objets téléchargés sur Cloud Storage
Essayez d'obtenir la liste des fonctions du paquet Python> os
Sortie "Dessiner fougère par programmation" dans le processus de dessin en Python
Facilitez la compréhension de l'affichage des exceptions du module Python
Changer la destination de sortie standard en un fichier en Python
L'histoire de l'introduction de Jedi (package de complétion automatique de python) dans emacs
[Python] Je souhaite utiliser l'option -h avec argparse
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Attacher au processus Python de la destination SSH et déboguer
Je veux connaître la nature de Python et pip
Keras Je veux obtenir la sortie de n'importe quelle couche !!
Récupérez la source de la page à charger indéfiniment avec python.
L'histoire selon laquelle la version de python 3.7.7 n'était pas adaptée à Heroku
Laissez le traitement gênant à Python
L'histoire de Python et l'histoire de NaN
Comment déterminer l'existence d'un élément sélénium en Python
Comment modifier le niveau de journalisation d'Azure SDK pour Python
First Python 3 ~ Le début de la répétition ~
Comment connaître la structure interne d'un objet en Python
Un moyen facile d'arrondir après la virgule décimale en python3
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Comment vérifier la taille de la mémoire d'une variable en Python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Sortie vers un fichier csv avec Python
Existence du point de vue de Python
[Python] Comment obtenir le premier et le dernier jour du mois
Premier python ② Essayez d'écrire du code tout en examinant les fonctionnalités de python
pyenv-changer la version python de virtualenv
Lire la sortie standard d'un sous-processus ligne par ligne en Python