Как определить, существует ли поле sysdig, или обработать ошибку, если ее нет

Я использую 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>") сохраняется.

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

Спасибо Стив Н

1 ответ

Решение

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

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

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

Другие вопросы по тегам