我创建了一个可以导入并按原样使用的lib,还有一个启动脚本,它创建了一个主类的单个实例,供脚本使用:
# read config, init stuff, and then create an instance
r = RepoClient(config)
现在,start脚本接受一个'command'参数,截至目前,它必须调用如下:
repo config.json -c 'r.ls()'
即。必须使用'r'变量。
我希望能够删除'r'变量。为此,启动脚本不知何故需要ls
函数。在创建r
实例后,我可以通过在脚本中添加以下内容来完成此操作:
ls = r.ls
等。对于RepoClient类支持的所有命令。
有什么自动的吗?当然,下面的代码不起作用,但你明白了这个想法:
from r import *
我能想到的是使用自定义@command
注释注释方法,迭代所有方法并检查它,如果找到,将其设置为脚本全局,但希望电池支持这样的事情已经; d
编辑:目前,作为最后一个参数传递的命令按以下方式运行:
exec(sys.argv[2])
答案 0 :(得分:1)
不,没有办法做到这一点"自动"。但是,您实际上并不需要将项目复制到全局命名空间中。您可以将命名空间传递给exec
以使用。您可以为RepoClient
__getitem__
方法提供方法,允许它充当命名空间。这是一个简单的例子:
class Foo(object):
def blah(self):
print("Blah!")
def __getitem__(self, attr):
return getattr(self, attr)
f = Foo()
exec('blah()', globals(), f)
输出Blah!
。