Создание массива из параметра командной строки (python::optparse)
Существует скрипт 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
Есть ли какие-либо предложения для этого?
Thanx
3 ответа
Если у вас есть Python 2.7+, вы можете использовать модуль argparse вместо optparse.
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']
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')
Вы можете принять список разделенных запятыми для имен тестов, как это
-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])