2

Pythonコンソールでは、次のステートメントは完全に正常に機能します(evalをそのように使用することはあまり適切ではないと思いますが、この場合はテスト目的であり、適切な解析に置き換えられます)

$ python
>>> import subprocess
>>> r = subprocess.Popen(['/pathto/plugin1.rb'], stdout=subprocess.PIPE, close_fds=True).communicate()[0]
>>> data = eval(r)
>>> data
{'test': 1}

これをServerdensityプラグインに変換すると、プラグインを実行するたびにagent.pyデーモンがクラッシュし続けます。サブプロセスラインに絞り込むことはできましたが、理由がわかりませんでした。例外キャッチも機能していないようです。

プラグインは次のようになります。

class plugin1:
  def run(self):
    r = subprocess.Popen(['/pathto/plugin1.rb'], stdout=subprocess.PIPE, close_fds=True).communicate()[0]
    data = eval(r)
    return data

私はPythonを使用するのはまったく新しいので、なぜこれが機能しないのか本当に理解できません。アイデアをどうもありがとう:)

4

2 に答える 2

0

モジュールにサブプロセスがインポートされていますか? また、どのようなエラーが発生していますか?エラー メッセージを投稿していただけますか?

于 2010-04-01T14:51:57.920 に答える
0

開発ボックスを切り替えた後(おそらくPythonのバージョンが異なるためですか?)、最終的に適切なエラー出力を得ることができました。

次に、それはかなり単純でした。実際には、欠落しているサブプロセス モジュールをインポートする必要がありました。

ソリューションに関心のある方へ:

http://github.com/maxigs/Serverdensity-Wrapper-Plugin/blob/master/ruby_plugin.py

まだ本番環境には対応していませんが、保存入力では既に機能しています

于 2010-04-02T19:24:49.603 に答える