Subprocess语句在python控制台中工作但在Serverdensity插件中不起作用?

时间:2010-04-01 13:44:17

标签: python subprocess popen

在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 plugin时,它会在每次执行插件时不断崩溃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

我很擅长使用p​​ython并且无法弄清楚为什么这不起作用。非常感谢您的想法:)

2 个答案:

答案 0 :(得分:0)

您是否在模块中导入了子进程?您还会收到错误信息吗?

答案 1 :(得分:0)

切换我的开发盒后(也许是因为不同的python版本?)我终于得到了一些正确的错误输出。

然后它很简单:我真的只需要导入丢失的子进程模块。

谁对解决方案感兴趣:

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

尚未准备好生产,但已经可以用于保存输入