4

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

bin/instance run <path to script in eggs directory>

显然,如果我的产品有新版本出现,我需要更改路径以指向新版本的 egg。我想做的是在我的产品的 setup.py 中为脚本定义任何入口点,然后使用 buildout recipezc.recipe.egg这样我就可以运行

bin/myscript

我该如何做到这一点,并且仍然提供对顶级app对象和安装在我的 Plone 实例中的所有代码的脚本访问权限?

4

1 回答 1

7

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

例如,以下内容会将您的 egg 中的可调用对象与命令联系起来:

[zopectl.command]
mybatch = example.egg.commands:mybatch

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

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

使用 args 为您的脚本实现命令行开关。

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

于 2012-05-09T11:02:11.413 回答