2016-11-28 7 views
2

私は次のように記述することができますPythonのClickを使ってargsのリストを取得する方法はもっと慣れていますか?

import click 


@click.command() 
@click.option('--things', callback=lambda _,__,x: x.split(',') if x else []) 
def fun(things): 
    print('You gave me these things: {}'.format(things)) 


if __name__ == '__main__': 
    fun() 

これは動作するように見える、私はfun.pyとして保存し、少なくとも場合、私は実行することができます:

$ python fun.py 
You gave me these things: [] 
$ python fun.py --things penguins,knights,"something different" 
You gave me these things: ['penguin', 'knights', 'something different'] 

が使用してこのコードを書くためのより多くの慣用的な方法はありますクリックするか、それともそれほどですか?

+2

(私はクリックユーザーではないので、私は大粒の塩で言う) - ドキュメントによれば、[「固定数の引数だけがサポートされています」] (http://click.pocoo.org/5/options/#multi-value-options)。だから私はこの戦略がかなり最適だと思う。明らかに、これをたくさん使うつもりなら、適切に指名されたヘルパーは 'ラムダ'よりも良いでしょう。また、 'multiple = True'を' 'python fun.py --thing penguin -thing knights ... ''をサポートするために使うこともできますが、それはコマンドライン構造を変更します。 – mgilson

+0

私はそのアプローチを取って、何とかリストを分割/連結することを考えました。それが私のためにうまくいくかどうかは分かりません。 –

+0

http://click.pocoo.org/5/options/#multi-value-options? –

答えて

0

私が望むと思うのは、パラメータの「複数の」オプションです。例えば。

import click 

@click.command() 
@click.option('--thing', multiple=True) 
def fun(thing): 
    print('You gave me these things: {}'.format(thing)) 

if __name__ == '__main__': 
    fun() 

複数の値を渡す場合は、thingを複数回指定します。そうであるように:

$ python fun.py 
You gave me these things:() 

$ python fun.py --thing me 
You gave me these things: ('me',) 

$ python fun.py --thing penguins --thing knights --thing "something different" 
You gave me these things: ('penguins', 'knights', 'something different') 
関連する問題