4

次のようなコードがあるとします。

columns = ['col1', 'col2', 'col3', 'col4']

@click.option('--columns', is_flag=False, 
  default=columns, show_default=True, metavar='<columns>', type=click.Choice(columns), 
  help='Sets target columns', multiple=True)

次に、次のようにアプリを呼び出すことができます。

./myapp --columns=col1

ただし、カンマで区切られた複数のアイテムでこれを機能させる方法は次のとおりです。

./myapp --columns=col1,col3

columns私の目標は、結果の配列から渡された値を取得すること['col1', 'col3']です。

オプションを複数回渡したくありません。

4

2 に答える 2

9

multipleキーワード inclick.optionは、同じオプションを複数回渡すことができるようにするためのものです--columns=col1 --columns=col2。代わりに、列の文字列を受け入れてから、自分で列を抽出して検証できます。

cols = ['col1', 'col2', 'col3', 'col4']

@click.option('--columns', is_flag=False, default=','.join(cols), show_default=True,
              metavar='<columns>', type=click.STRING, help='Sets target columns')
@click.command()
def main(columns):
    # split columns by ',' and remove whitespace
    columns = [c.strip() for c in columns.split(',')]

    # validate passed columns
    for c in columns:
        if c not in cols:
            raise click.BadOptionUsage("%s is not an available column." % c)

    print(columns)
于 2015-12-07T17:19:45.903 に答える