Cliquez sur vous permet de définir et d'utiliser des types d'arguments personnalisés. → http://click.pocoo.org/6/parameters/#implementing-custom-types
Créez une classe qui hérite de click.ParamType et remplace convert (). Si la valeur renvoyée par convert () est None, cette valeur (et via ce convert ()) sera la valeur facultative si l'argument par défaut est défini.
Dans l'exemple d'implémentation suivant, seules les chaînes de caractères sont renvoyées sans eval et les chaînes de caractères qui ne peuvent pas être eval sont renvoyées brutes. S'il contient des blancs, citez-le et transmettez-le. Les chaînes de caractères développées dans le shell doivent être échappées ou conçues.
eval_param_type.py
# -*- encoding: utf-8 -*-
import click
class EvalParamType(click.ParamType):
def convert(self, value, param, ctx):
if not isinstance(value, str):
return value
try:
return eval(value)
except:
return value # raw string
@click.command()
@click.option('--p', type=EvalParamType(), default={0:1, 2:3})
##Passez une instance de la classe dans le mot-clé type
def main(**kwargs):
if 'p' in kwargs:
print 'kwargs:', kwargs
p = kwargs['p']
print p.__class__, p
if __name__ == '__main__':
main()
j'essaierai
$ python eval_param_type.py
kwargs: {'p': {0: 1, 2: 3}}
<type 'dict'> {0: 1, 2: 3}
$ python eval_param_type.py --p "Hello"
kwargs: {'p': 'Hello'}
<type 'str'> Hello
$ python eval_param_type.py --p "'Hello, world'"
kwargs: {'p': 'Hello, world'}
<type 'str'> Hello, world
$ python eval_param_type.py --p hello
kwargs: {'p': 'hello'}
<type 'str'> hello
$ python eval_param_type.py --p 3.14
kwargs: {'p': 3.14}
<type 'float'> 3.14
$ python eval_param_type.py --p 5
kwargs: {'p': 5}
<type 'int'> 5
$ python eval_param_type.py --p -3
kwargs: {'p': -3}
<type 'int'> -3
$ python eval_param_type.py --p True
kwargs: {'p': True}
<type 'bool'> True
$ python eval_param_type.py --p 1+2
kwargs: {'p': 3}
<type 'int'> 3
$ python eval_param_type.py --p []
kwargs: {'p': []}
<type 'list'> []
$ python eval_param_type.py --p "()"
kwargs: {'p': ()}
<type 'tuple'> ()
$ python eval_param_type.py --p None
kwargs: {'p': {0: 1, 2: 3}}
<type 'dict'> {0: 1, 2: 3}
//Évaluez «Aucun» pour devenir Aucun et allez voir la valeur définie dans l'argument par défaut
Recommended Posts