4

私はスクリプト用のPHPフレームワークとPythonについてかなりの経験を持っているので、今はPyramidへの一歩を踏み出しています。

Pyramidでスクリプトを実行するための「正しい」方法を知りたいのですが。つまり、アプリケーションの一部であり、構成、つまりデータベースにアクセスできるが、パスター(またはWSGI)を介して実行されないように設定するにはどうすればよいですか。

例として、ユーザーがオフラインのときにWebサービスを介してFacebookの更新を取得するWebアプリケーションがあるとします。そのサービスをポーリングし、次のログインに備えてデータベースに保存するスクリプトを作成したいと思います。

次の点でこれをどのように行う必要がありますか?

  1. iniファイルに変数を追加する
  2. スクリプトを正しく開始する

Pythonモジュールとパッケージの基本を理解しています。しかし、私はConfigurator / Paster / packageのセットアップを完全には理解していません。そこでは、答えがあるのではないかと思います。

ありがとう

アップデート:

おかげで、これは私が探しているものの線に沿っているようです。特定の構造に従う必要があり(たとえば、summary属性とparser属性が設定されている)、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

paster は、そのアプリケーションを記述する 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

pylons のディスカッション リストに行った後、私は答えを思いつきました。これが誰かに役立つことを願っています:

 #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 に答える