Как определить, существует ли поле 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
метод с вашими аргументами в защищенном режиме и ловить любые последующие ошибки.