使用optparse
,我想将选项列表参数列表与我调用add_option()的地方分开。如何将文件A中的东西打包(然后在文件B中解压缩)以便这可以工作? parser_options.append()行不会像写的那样工作......
档案A:
import file_b
parser_options = []
parser_options.append(('-b', '--bootcount', type='string', dest='bootcount', default='', help='Number of times to repeat booting and testing, if applicable'))
parser_options.append(('-d', '--duration', type='string', dest='duration', default='', help='Number of hours to run the test. Decimals OK'))
my_object = file_b.B(parser_options)
文件B接收parser_options作为输入:
import optparse
class B:
def __init__(self, parser_options):
self.parser = optparse.OptionParser('MyTest Options')
if parser_options:
for option in parser_options:
self.parser.add_option(option)
* 编辑:已修复使用ojbects
答案 0 :(得分:0)
不是试图将你的选项套入某些数据结构,而是在文件A中定义一个向你提供的解析器添加选项的函数不是更简单吗?
档案A:
def addOptions(parser):
parser.add_option('-b', '--bootcount', type='string', dest='bootcount', default='', help='Number of times to repeat booting and testing, if applicable')
parser.add_option('-d', '--duration', type='string', dest='duration', default='', help='Number of hours to run the test. Decimals OK')
档案B:
import optparse
def build_parser(parser_options):
parser = optparse.OptionParser('MyTest Options')
if parser_options:
parser_options(parser)
别处:
import file_a
import file_b
file_b.build_parser(file_a.addOptions)
答案 1 :(得分:0)
你遇到的问题是你试图在元组中传递关键字参数。代码('-b', '--bootcount', type='string', dest='bootcount', default='', help='Number of times to repeat booting and testing, if applicable')
仅在函数调用中合法,而不是其他任何地方。 type='string'
位在元组中是不合法的!
如果要传递函数参数,则需要使用列表或元组作为位置参数,并使用字典作为关键字参数。这是通过更改包含args
元组和kwargs
字典的元组的单个元组来实现此目的的一种方法:
parser_options = []
parser_options.append((('-b', '--bootcount'),
dict(type='string', dest='bootcount', default='',
help='Number of times to repeat booting and testing, if applicable')))
parser_options.append((('-d', '--duration'),
dict(type='string', dest='duration', default='',
help='Number of hours to run the test. Decimals OK')))
在你的另一个文件中,你可以使用*
和**
运算符将元组和dict的内容传递给相应的函数来解压缩参数:
class B:
def __init__(self, parser_options)
self.parser = optparse.OptionParser('MyTest Options')
if parser_options:
for args, kwargs in parser_options:
self.parser.add_option(*args, **kwargs)
答案 2 :(得分:0)
我最终将解析器传递给构造中的对象,这很好,因为我可以从调用模块命名它:
import optparse
parser = optparse.OptionParser('My Diagnostics')
parser.add_option('-p', '--pbootcount', type='string', dest='pbootcount', default='testing1234', help=' blah blah')
c = myobject.MyObject(parser)