4

次のようなコマンド ラインからベンチマーク名を読み取る python スクリプトがあります。

-b benchname1

このパーポーズのコードは次のとおりです。

import optparse
import Mybench
parser = optparse.OptionParser()
# Benchmark options
parser.add_option("-b", "--benchmark", default="", help="The benchmark to be loaded.")
if options.benchmark == 'benchname1':
  process = Mybench.b1
elif options.benchmark == 'benchname2':
  process = Mybench.b2
else:
  print "no such benchmark!"

私がやりたいことは、このコマンド ラインの一連のベンチマークを作成することです。

-b benchname1 benchname2

したがって、「プロセス」は次のような配列である必要があります。

process[0] = Mybench.b1
process[1] = Mybench.b2

そのための提案はありますか?

ありがとう

4

3 に答える 3

8

Python 2.7 以降を使用している場合は、optparse の代わりにargparseモジュールを使用できます。

import argparse

parser = argparse.ArgumentParser(description='Process benchmarks.')
parser.add_argument("-b", "--benchmark", default=[], type=str, nargs='+',
                    help="The benchmark to be loaded.")

args = parser.parse_args()
print args.benchmark

スクリプトの実行例 -

$ python sample.py -h
usage: sample.py [-h] [-b BENCHMARK [BENCHMARK ...]]

Process benchmarks.

optional arguments:
  -h, --help            show this help message and exit
  -b BENCHMARK [BENCHMARK ...], --benchmark BENCHMARK [BENCHMARK ...]
                        The benchmark to be loaded.

$ python sample.py -b bench1 bench2 bench3
['bench1', 'bench2', 'bench3']
于 2011-10-06T08:10:11.383 に答える
4
    self.opt_parser.add_argument('-s', '--skip',
        default=[],
        type=str,
        help='A name of a project or build group to skip. Can be repeated to skip multiple projects.',
        dest='skip',
        action='append')
于 2011-10-06T07:38:46.680 に答える
1

このようなベンチマーク名のカンマ区切りのリストを受け入れることができます

-b benchname1,benchname2

次に、コード内のコンマ区切りリストを処理して配列を生成します -

bench_map = {'benchname1': Mybench.b1,
             'benchname2': Mybench.b2,
            }
process = []

# Create a list of benchmark names of the form ['benchname1', benchname2']
benchmarks = options.benchmark.split(',')

for bench_name in benchmarks:
    process.append(bench_map[bench_name])
于 2011-10-06T07:47:44.270 に答える