繁体   English   中英

子进程语句在python控制台中有效,但在Serverdensity插件中无效?

[英]Subprocess statement works in python console but not work in Serverdensity plugin?

在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的新手,无法真正弄清楚为什么它不起作用。 非常感谢您的想法:)

您是否在模块中导入了子流程? 另外,您遇到什么错误,可以发布错误消息吗?

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

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

对于谁对解决方案感兴趣:

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

尚未完成生产准备,但已经可以保存输入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM