4

我在 PHP 框架和 Python 脚本方面有相当多的经验,所以现在我迈出了 Pyramid 的一步。

我想知道在 Pyramid 中运行脚本的“正确”方法是什么。也就是说,我应该如何设置它,使它成为应用程序的一部分,并且可以访问配置和数据库,但不能通过 paster(或任何 WSGI)运行。

例如,假设我有一个 Web 应用程序,当用户离线时,它通过 Web 服务获取 Facebook 更新。我想编写一个脚本来轮询该服务并存储在数据库中以备下次登录。

我应该如何做到这一点:

  1. 在ini文件中添加变量
  2. 正确启动脚本

我了解 Python 模块和包的基础知识;但是我并不完全理解 Configurator/Paster/package setup,我怀疑答案就在其中。

谢谢

更新:

谢谢,这似乎符合我正在寻找的内容。我注意到你必须遵循一定的结构(例如,设置摘要和解析器属性)并且名为 command() 的函数将始终运行。我的测试代码现在看起来像这样:

class AwesomeCommand(Command):

max_args = 2
min_args = 2

usage = "NAME"
# These are required
summary = "Say hello!"
group_name = "My Package Name"
# Required:
parser = Command.standard_parser(verbose=True)


def command(self):

    # Load the config file/section
    config_file, section_name = self.args
    # What next?

我现在不知道如何自己获取设置。例如,在init.py你可以这样做:

 engine = engine_from_config(settings, 'sqlalchemy.')

我需要做什么才能将配置文件转换为设置?

编辑:在 Pylons 中执行此操作的(更简单)方法在这里: 将 Pylons 控制器作为单独的应用程序运行?

4

4 回答 4

2

从 Pyramid 1.1 开始,这由框架处理:

http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/commandline.html#writing-a-script

于 2012-02-03T16:10:38.337 回答
1

paste 在给定一个描述该应用程序的 ini 文件的情况下启动一个应用程序。“serve”命令是用于启动 wsgi 应用程序并为其提供服务的内置命令。但是,您可以编写其他命令

from paste.script.command import Command
class AwesomeCommand(Command):
    def command(self):
        print "the awesome thing it does"

然后将它们注册为 setup.py 中的入口点。

setup(...
entry_points="""
  [paste.app_factory]
  .....

  [paste.global_paster_command]
  myawesome-command = mypackage.path.to.command:AwesomeCommand    """)

金字塔以这种方式添加它自己的命令,就像pshell 命令一样。

于 2011-06-03T01:32:59.983 回答
1

在去塔架讨论列表后,我想出了一个答案。希望这可以帮助某人:

 #Bring in pyramid application--------------------------------------

 import pyramid
 from paste.deploy import appconfig
 config_file = '/path_to_config_file/configname.ini'

 name = 'app_name'
 config_name = 'config:%s' % config_file
 here_dir = os.getcwd()

 conf = appconfig(config_name, name, relative_to=here_dir)

 from main_package import main
 app = main(conf.global_conf, **conf.local_conf)

 #--------------------------------------------------------------------------
于 2011-06-10T14:24:13.913 回答
0

您需要查看该操作,然后使用以下命令运行它:

paster request development.ini /url_to_your_view
于 2011-06-01T22:38:50.623 回答