我有一个 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()
