web-dev-qa-db-ja.com

Python Optparseリスト

プログラムでpython optparseモジュールを使用していますが、値のリストを含むオプションを解析する簡単な方法を見つけるのに問題があります。

例えば:

--groups one,two,three. 

options.groups[]としてリスト形式でこれらの値にアクセスできるようにしたいと思います。カンマ区切りの値をリストに変換するoptparseオプションはありますか?または、これを手動で行う必要がありますか?

38
Daniel Delaney

オプションコールバック を見てください。コールバック関数は、基本的なoptarg.split(',')を使用して値をリストに解析できます。

40
S.Lott

S.Lottの回答はすでに受け入れられていますが、アーカイブのコードサンプルは次のとおりです。

def foo_callback(option, opt, value, parser):
  setattr(parser.values, option.dest, value.split(','))

parser = OptionParser()
parser.add_option('-f', '--foo',
                  type='string',
                  action='callback',
                  callback=foo_callback)
84
Can Berk Güder

繰り返しますが、アーカイブの完全性のために、上記の例を拡張します。

  • 「dest」を使用して、後でアクセスするためのオプション名を指定することもできます
  • このような場合、デフォルト値を使用することはできません( optparseのデフォルト値でのコールバックのトリガー の説明を参照してください)
  • 入力を検証したい場合は、foo_callbackからOptionValueErrorをスローする必要があります

(小さな変更を加えた)コードは次のようになります。

def get_comma_separated_args(option, opt, value, parser):
    setattr(parser.values, option.dest, value.split(','))

parser = OptionParser()
parser.add_option('-f', '--foo',
                  type='string',
                  action='callback',
                  callback=get_comma_separated_args,
                  dest = foo_args_list)
11
its me

Optparseを使用すると、リスト値を取得するためにアクション 'append'を使用できます。

from optparse import OptionParser
parser = OptionParser()
parser.add_option("--group",
                  action="append",
                  dest="my_groups")
(options, args) = parser.parse_args()
print options.my_groups

次に、次のようにプログラムを呼び出します。

$ python demo.py --group 1 --group 2 --- group three

['一二三']

8
Fengya Li