2011-07-07 8 views
5

Twistedフレームワークを使用して自分用に素敵なアプリケーションを書いたことがあります。私は^^ 怠け者だから、私は、このコマンドを使用してスクリプトを書いた私のアプリを起動するにはそれは素晴らしい作品ねじれのないツイストアプリケーション

twistd -y myapp.py --pidfile=/var/run/myapp.pid --logfile=/var/run/myapp.log 

=)

しかし、私は私のアプリを起動するので、私はそれは次のようなコマンドを使用して起動します同じtwistedオプション、私はスクリプトシェルソリューションをつまんで、私は同じことをすることができますが、私のアプリ内で醜いですか?私はちょうど./myappを実行し、シェルの回避策なしで私のアプリを起動したいと思います。

私はねじれた文書にし、ねじれたソースを読み取ることによって、それについて検索してみたが、それはPythonで私の最初のアプリですので、私はそれを理解していない(ところで素晴らしい言語!)anyhelpを事前に

感謝を。

答えて

4

Twistedからtwistdスクリプトをモジュールとしてインポートして呼び出す必要があります。既存のコマンドラインを使用してこれを解決する最も簡単な方法は、sysモジュールをインポートして、argvコマンドラインを置き換えて、twistdの実行方法のように見せてから実行することです。

ここでは、既存のコマンドラインを取り、代わりにシェルスクリプトのPythonスクリプトでそれを実行する簡単なスクリプトの例です:あなたがパッケージにうまくこれをバンドルしたい場合

#!/usr/bin/python 
from twisted.scripts.twistd import run 
from sys import argv 
argv[1:] = [ 
    '-y', 'myapp.py', 
    '--pidfile', '/var/run/myapp.pid', 
    '--logfile', '/var/run/myapp.log' 
] 
run() 

ではなく、ハードコーディングパスでは、myapp.pyへのパスを決定するには、各モジュールでPythonによって設定された特別な__file__変数を調べます。

#!/usr/bin/python 
from twisted.scripts.twistd import run 
from my.application import some_module 
from os.path import join, dirname 
from sys import argv 
argv[1:] = [ 
    '-y', join(dirname(some_module.__file__), "myapp.py"), 
    '--pidfile', '/var/run/myapp.pid', 
    '--logfile', '/var/run/myapp.log' 
] 
run() 

、あなたは明らかに適切なpidファイルやログファイルのパスを計算するために同様のことを行うことができます:例にこれを追加すると、そのように見えます。

より包括的な解決策は、twistdの場合はa pluginと書いてください。 axiomatic Axiomオブジェクトデータベースプロジェクトのコマンドラインプログラムは、上記の説明と同様のコマンドライン操作をtwistdとどのように行うのかをテストした実績のある例として機能しますが、コマンドラインオプションをより包括的に処理し、異なる非ねじれランニングユーティリティ機能などが含まれる。

+0

こんにちは、ありがとうございました。私は既にプラグインとしてアプリケーションを作成しています(今はログファイルやpidfileのようなコードオプションを設定する方法を知っています)。ライブラリがまさに私が欲しいものであるようにtwistedをまとめてください:)あなたの例は少し複雑ですが、私は試しています! – unpythonicguy

+0

まあ、私は試しましたが、実際にあなたの例を理解していません:( – unpythonicguy

+1

'from twisted.scripts.twistd import; from sys import argv; argv [1:] = ['-y'、 'myapp。 '' -pidfile =/var/run/myapp.pid '、' --logfile =/var/run/myapp.log ']; run() ' –

関連する問題