2013-01-09 30 views
0

使用optparse,我想从我调用add_option()的地方分开选项列表参数列表。我如何将文件打包到文件A中(然后在文件B中解压缩),这样才能起作用?该parser_options.append()作为写入线条将无法正常工作......如何将参数列表传递给Python中的另一个函数?

文件:

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

+1

'import file_A'?什么是控制流程? – StoryTeller

+0

调用'build_parser()'在哪里? – millimoose

+0

这只是一个片段,因为有涉及的对象,这将是很多张贴。我只是想说出问题的味道。我需要将这些parser_options从一个对象传递到另一个对象。 –

回答

0

与其试图将选项硬塞进某些数据结构中,在文件A中定义函数并不简单t将选项添加到您给它的解析器中?

文件:

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) 
+0

是的,这会更简单,但是我将parser_options传递给构造中的对象,因为解析需要在__init__中发生。所以在构建之前我可以调用的对象中没有任何东西。 –

+0

函数也是值。我会编辑更完整。 –

+0

我更新了示例以显示问题...我没有将它们两者都导入的文件C –

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'))) 

在你的其他的文件,你可以通过元组和字典的内容,以适当的功能使用***运营商来解压缩参数:

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) 
+0

是的,那是我正在寻找的结构。你回答了我最终提出的问题,菲尔弗洛斯特帮助我找到了一种更直接的方式来做我想做的事。谢谢! –

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) 
相关问题