2012-03-18 9 views
0

私はPythonを使ってIRCボットを構築しています。私はボットを拡張可能にする必要があり、ボットが実行されているときにモジュールをチェックし、それらをオンザフライで登録するモジュールシステムを構築しようとしています。たとえば、十分なアクセス権を持っている人は、モジュール/ディレクトリ内のフィード解析モジュールを検索するIRCで「module enable feedparse」のようなものを送ることができます。そこにある場合は、モジュール自体のグローバル変数からモジュールの完全な名前、バージョン、および説明を取得します。次に、その場でモジュールを登録して有効にします。Pythonを使用してモジュールマネージャを作成しますか?

は、どのように私はこれを行うに行きますか?ありがとう!

+0

この質問はかなり曖昧で、本当に空想を取得したい場合は、上記の多く

はちょうどsubprocessmultiprocessモジュールを用いて達成することができます。あなたは、 "モジュールをチェック"し、 "即座に登録する"。私は、モジュールを「チェック」することが何を意味するのか、また「登録する」ことが何を意味するのかを知りません。おそらくあなたが探しているのは['__import__()'](http://docs.python.org/library/functions.html#__import__)ですか? –

+0

チェックすると、ボットが "登録"されるために必要な機能がモジュールに存在しているかどうかをチェックします。登録することで、それらをインポートすることを意味します。そして、モジュールがすぐに有効になるように、トリガーなどをボットに「注入する」と思います。 –

答えて

1

私は個人的に以下のことを行っています。あなたのモジュールのマネージャーを作成し、モジュールを完全に別個のプロセスとして実行します。

  • プロセスをリロードその方法は、それがシャットダウンと起動
  • 殺害し、実行するだけです
  • 簡単ですので、あなたがIRC チャンネルにちょうどパイプの標準エラー出力することができますので、エラー処理があります。
  • はまた、インポートボットを停止させるか、ニシキヘビを戦うことなく、新しいモジュールをロードすることができるという利点を有する力学

モジュールのリロードまたは他の方法を心配するよりも、そのはるかに良いこの「ハイパーバイザー」のデザインを使用するには同じ目標を達成する。また、Pythonで発生する可能性のあるホットコードの再読み込みの問題を回避します。あなたは

+0

しかし、サブプロセスはメインスクリプトとどのように通信するのですか?すなわちトリガを処理し、状態メッセージを端末に送信する。 「ハイパーバイザー」デザインは、私が見る限り、より効率的に動作します。 –

+0

パイプを入力して出力を読むだけで、それをどのように実装したいのですか –

+0

少し複雑に思えます... –

関連する問題