Skip to main content
 首页 » 编程设计

python之作为模块和可执行文件的脚本

2025年05月04日16daizhj

  • 我有一个 python 脚本,可以从命令行调用并使用 optparse。

    script -i arg1 -j arg2 
    

    在这种情况下,我使用 (options, args) = parser.parse_args() 创建 options 然后使用 options.arg1 得到论点。

  • 但我也希望它可以作为模块导入。

    from script import * 
    function(arg1=arg1, arg2=arg2) 
    

    我已经设法使用一个非常蹩脚的解决方案来做到这一点:通过提供一个虚拟对象。

    def main(): 
        class Options: 
            ''' dummy object ''' 
            def __init__(self): 
                pass 
        options = Options 
        for k in kwargs: 
            setattr(options, k, kwargs[k]) 
    

脚本的其余部分不知道区别,但我认为这个解决方案很糟糕。

有更好的解决方案吗?

请您参考如下方法:

将 CLI 与主力类分开:

class Main(object): 
    def __init__(self,arg1,arg2): 
        ... 
    def run(self): 
        pass 
 
if __name__=='__main__': 
    import optparse 
    class CLI(object): 
        def parse_options(self): 
            usage = 'usage: %prog [options]'+__usage__ 
            parser = optparse.OptionParser(usage=usage) 
            parser.add_option('-i', dest='arg1') 
            parser.add_option('-j', dest='arg2')  
            (self.opt, self.args) = parser.parse_args() 
        def run(self): 
            self.parse_options()         
            Main(self.opt.arg1,self.opt.arg2).run() 
    CLI().run()