Mit Click können Sie benutzerdefinierte Argumenttypen definieren und verwenden. → http://click.pocoo.org/6/parameters/#implementing-custom-types
Erstellen Sie eine Klasse, die von click.ParamType erbt und convert () überschreibt. Wenn der von convert () zurückgegebene Wert None ist, ist dieser Wert (und über diese convert ()) der optionale Wert, wenn das Standardargument festgelegt ist.
Im folgenden Implementierungsbeispiel werden nur Zeichenfolgen ohne Auswertung zurückgegeben, und Zeichenfolgen, die nicht ausgewertet werden können, werden roh zurückgegeben. Wenn es Leerzeichen enthält, zitieren Sie es und übergeben Sie es. Zeichenketten, die auf die Shell erweitert werden, müssen maskiert oder entwickelt werden.
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})
##Übergeben Sie eine Instanz der Klasse im Schlüsselwort type
def main(**kwargs):
if 'p' in kwargs:
print 'kwargs:', kwargs
p = kwargs['p']
print p.__class__, p
if __name__ == '__main__':
main()
Ich werde es versuchen
$ 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}
//Bewerten Sie "Keine", um "Keine" zu werden, und sehen Sie sich den im Standardargument festgelegten Wert an
Recommended Posts