之前我问了一个问题here。该问题已解决,但在开发脚本时出错。
目前,可以从命令行获取选项,如:
... -b b1
代码处理:
import Mybench, optparse
parser.add_option("-b", "--benchmark", default="", help="The benchmark to be loaded.")
if options.benchmark == 'b1':
process = Mybench.b1
elif options.benchmark == 'b2':
process = Mybench.b2
...
else:
print "no such benchmark!"
现在我已更改,因此将多个选项传递给“-b”。
... -b b1,b2
这个代码是:
process = []
benchmarks = options.benchmark.split(',')
for bench_name in benchmarks:
print bench_name
process.append(Mybench.bench_name)
如果您注意到,在第一个代码中,进程获得如下值:
process = Mybench.b1
现在我写下这个:
process.append(Mybench.bench_name)
我希望这个命令行:
... -b b1,b2
结果:
process[0] = Mybench.b1
process[1] = Mybench.b2
但是我收到了这个错误:
process.append(Mybench.bench_name)
AttributeError: 'module' object has no attribute 'bench_name'
有没有解决方案呢?
答案 0 :(得分:4)
bench_name
是一个字符串,而不是标识符,因此您需要使用getattr()
:
process.append(getattr(Mybench, bench_name))
答案 1 :(得分:2)
对我而言,有以下区别:
- process.b1
- process.bench_name =>过程。 “B1”
getattr()可能是你遗嘱的关键。