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 ...
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.
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)
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