1

Pythonのoptparseを使用して最善を尽くしていますが、コマンドラインで他に指定されていない場合、デフォルトの引数値でオプションのコールバックトリガーを作成する方法がわかりません。これも可能ですか?これにより、私のコードがはるかにクリーンになります。

残念ながら、実行しているプラ​​ットフォームのPythonバージョンが古いため、argparseを使用できません。

編集: 詳細を提供するために、コールバックとデフォルト値を持つオプションを追加しています

parser.add_option(
  "-f",
  "--format",
  type = "string",
  action = "callback",
  callback = format_callback,
  default = "a,b,c,d")

コールバック関数は次のように定義されています。

def format_callback(option, opt, value, parser):
  # some processing
  parser.values.V = processed_value

基本的に、私は"--format"値を処理し、結果をパーサーに入れています。これ"--format"は、コマンドラインから直接指定されている場合は正常に機能しますが、デフォルト"a,b,c,d"値でもコールバックがトリガーされるようにしたいと思います。

4

2 に答える 2

3

それは単に不可能です。

optparse.OptionParser実装はparse_args次から始まります。

def parse_args(self, args=None, values=None):
    """
    parse_args(args : [string] = sys.argv[1:],
               values : Values = None)
    -> (values : Values, args : [string])

    Parse the command-line options found in 'args' (default:
    sys.argv[1:]).  Any errors result in a call to 'error()', which
    by default prints the usage message to stderr and calls
    sys.exit() with an error message.  On success returns a pair
    (values, args) where 'values' is an Values instance (with all
    your option values) and 'args' is the list of arguments left
    over after parsing options.
    """
    rargs = self._get_args(args)
    if values is None:
        values = self.get_default_values()

デフォルト値は、引数を処理する前に設定されます。オプションが解析されると、実際の値がデフォルトを上書きします。オプションのコールバックは、対応する引数が見つかったときに呼び出されます。

そのため、コールバックをデフォルトで呼び出すことはできません。モジュールの設計上、optparseこれを変更するのは非常に困難です。

于 2013-01-28T18:34:47.903 に答える