Оператор подпроцесса работает в консоли Python, но не работает в плагине Serverdensity? - PullRequest
2 голосов
/ 01 апреля 2010

в консоли 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 , однако он продолжает сбой при запуске агента. я смог сузить его до строки подпроцесса, но не мог понять почему. перехват исключений тоже не сработал.

вот как выглядит плагин:

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 и не могу понять, почему это не сработает. Большое спасибо за идеи:)

Ответы [ 2 ]

0 голосов
/ 02 апреля 2010

После переключения моего dev-бокса (возможно, из-за другой версии python?) Я наконец смог получить корректный вывод ошибок.

Тогда это было довольно просто: мне просто нужно было импортировать отсутствующий модуль подпроцесса.

Для тех, кто заинтересован в решении:

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

Не совсем готов к производству, но уже работает для сохранения ввода

0 голосов
/ 01 апреля 2010

У вас есть импортированный подпроцесс в модуле? Кроме того, какую ошибку вы можете получить, вы могли бы опубликовать сообщение об ошибке?

...