在Pyramid框架内运行脚本(即没有服务器)

时间:2011-06-01 19:25:24

标签: python scripting pylons pyramid

我在使用PHP框架和Python编写脚本方面有很多经验,所以我现在正在向Pyramid迈出一步。

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

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

我应该如何做到这一点:

  1. 在ini文件中添加变量
  2. 正确启动脚本
  3. 我理解Python模块和包的基础知识;但我不完全了解Configurator / Paster / package设置,我怀疑答案就在于此。

    由于

    更新

    谢谢,这似乎符合我的要求。我注意到你必须遵循某种结构(例如设置了摘要和解析器属性),并且将始终运行名为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中执行此操作的(更简单)方法是:  Run Pylons controller as separate app?

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

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

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 command的方式添加自己的命令。

答案 2 :(得分: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)

 #--------------------------------------------------------------------------

答案 3 :(得分:0)

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

paster request development.ini /url_to_your_view