0

使用optparse,我想将选项列表参数列表与我调用 add_option() 的位置分开。我如何将这些东西打包到文件 A 中(然后在文件 B 中解包),这样才能正常工作?parser_options.append() 行不会像写的那样工作......

档案一:

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)

*编辑:固定使用对象

4

3 回答 3

0

与其尝试将您的选项硬塞进某个数据结构中,不如在文件 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)
于 2013-01-09T00:36:10.337 回答
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')))

*在您的另一个文件中,您可以使用and运算符将元组和 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)
于 2013-01-09T04:14:44.557 回答
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)
于 2013-01-09T15:15:41.077 回答