Как определить, существует ли поле sysdig, или обработать ошибку, если ее нет - PullRequest
0 голосов
/ 10 октября 2018

Я использую Sysdig для захвата некоторых событий и имею маленькое долото (скрипт LUA) для захвата и форматирования событий по мере необходимости.В on_init () я запрашиваю такие поля:

f_field = chisel.request_field("<field>")

Мой вопрос: как я могу проверить, существует ли поле перед его запросом?Я собираюсь использовать новое поле, только что выпущенное на 0.24.1, но в идеале я хотел бы, чтобы мое долото продолжало работать на более старых версиях sysdig без этого поля.Я попытался обернуть вызов chisel.request_field в pcall () примерно так:

ok, f_field = pcall(chisel.request_field("<field>"))

и даже реализовать свою собственную функцию "get_field":

function get_field(field)
  ok, f = pcall(chisel.request_field(field))
  if ok then return f else return nil end
end

f_field = get_field("<field>")
if f_field ~= nil then
  -- do something
end

, но ошибка("chisel requesting nonexistent field <field>") сохраняется.

Я не вижу способа проверить, существует ли поле, но я, похоже, тоже не могу обработать ошибку.Я действительно не хочу нескольких версий моих сценариев, если это возможно.

Спасибо, Стив H

1 Ответ

0 голосов
/ 10 октября 2018

Ты почти у цели.Ваша проблема в том, как вы используете pcall.Pcall принимает значение функции и любые аргументы, с которыми вы хотите вызвать эту функцию.В вашем примере вы передаете результат вызова функции request_field в pcall.Попробуйте вместо этого ..

ok, f = pcall(chisel.request_field, "field")

pcall вызовет метод chisel с вашими аргументами в защищенном режиме и обнаружит любые последующие ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...