J'essaie de créer un drapeau détaillé pour mon programme Python . Actuellement, je fais ceci:
import click
#global variable
verboseFlag = False
#parse arguments
@click.command()
@click.option('--verbose', '-v', is_flag=True, help="Print more output.")
def log(verbose):
global verboseFlag
verboseFlag = True
def main():
log()
if verboseFlag:
print("Verbose on!")
if __== "__main__":
main()
Ça n'imprimera jamais "Verbose on!" même quand je règle l'argument '-v'. Je pense que la fonction de journalisation a besoin d'un paramètre, mais que dois-je lui donner? En outre, y a-t-il un moyen de vérifier si l'indicateur détaillé est activé sans variables globales?
Donc, click n'est pas simplement un analyseur de ligne de commande. Il distribue et traite également les commandes. Ainsi, dans votre exemple, la fonction log()
ne retourne jamais à main()
. Le but du cadre est que la fonction décorée, à savoir: log()
, effectue le travail nécessaire.
import click
@click.command()
@click.option('--verbose', '-v', is_flag=True, help="Print more output.")
def log(verbose):
click.echo("Verbose {}!".format('on' if verbose else 'off'))
def main(*args):
log(*args)
if __== "__main__":
commands = (
'--verbose',
'-v',
'',
'--help',
)
import sys, time
time.sleep(1)
print('Click Version: {}'.format(click.__version__))
print('Python Version: {}'.format(sys.version))
for cmd in commands:
try:
time.sleep(0.1)
print('-----------')
print('> ' + cmd)
time.sleep(0.1)
main(cmd.split())
except BaseException as exc:
if str(exc) != '0' and \
not isinstance(exc, (click.ClickException, SystemExit)):
raise
Click Version: 6.7
Python Version: 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]
-----------
> --verbose
Verbose on!
-----------
> -v
Verbose on!
-----------
>
Verbose off!
-----------
> --help
Usage: test.py [OPTIONS]
Options:
-v, --verbose Print more output.
--help Show this message and exit.
La réponse ci-dessus a été utile, mais c'est ce que j'ai fini par utiliser. Je pensais partager puisque beaucoup de gens se penchent sur cette question:
@click.command()
@click.option('--verbose', '-v', is_flag=True, help="Print more output.")
def main(verbose):
if verbose:
# do something
if __== "__main__":
# pylint: disable=no-value-for-parameter
main()