您是否可以在Plone产品中定义一个入口点来运行脚本,就好像它是由bin/instance run调用的一样

sca*_*a05 4 zope plone recipe buildout batch-processing

我有一个批处理作业,我需要偶尔对我的Plone实例运行.它需要访问我的Plone产品和其他Plone代码中的代码并查询目录.我已将该脚本包含在我的Plone产品中,目前通过它运行

bin/instance run <path to script in eggs directory>
Run Code Online (Sandbox Code Playgroud)

显然,如果我的产品的新版本出现,我需要改变路径指向新版本的鸡蛋.我想要做的是在我的产品的setup.py中定义脚本的任何入口点,然后使用buildout配方,zc.recipe.egg以便我可以运行

bin/myscript
Run Code Online (Sandbox Code Playgroud)

我该怎么做,仍然提供我的脚本访问顶级app对象和我的Plone实例中安装的所有代码?

Mar*_*ers 6

从Zope 2.13开始,您可以为zopectl.command入口点注册脚本.这些将被视为bin/instance控制器脚本上的新命令.

例如,以下内容将鸡蛋中的callables与命令联系起来:

[zopectl.command]
mybatch = example.egg.commands:mybatch
Run Code Online (Sandbox Code Playgroud)

您的callable将传递给根级应用程序对象,以及其余的命令行参数:

def mybatch(app, args):
    site = app.mysiteid
    # remember to set up your site correctly (create request, call hooks, etc)
Run Code Online (Sandbox Code Playgroud)

使用args为脚本实现命令行开关.

请参阅配置和运行Zope文档 ; 请注意,您的命令名称不能-在名称中使用短信().