如何确定sysdig字段是否存在或如何处理错误(如果不存在)

时间:2018-10-10 08:29:59

标签: lua 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>")仍然存在。

我看不到检查字段是否存在的方法,但似乎也无法处理该错误。如果可能,我真的不希望我的脚本有多个版本。

谢谢 史蒂夫·H

1 个答案:

答案 0 :(得分:1)

您快到了。您的问题在于您如何使用pcall。 Pcall接受一个函数值以及您希望用来调用该函数的所有参数。在您的示例中,您正在将request_field函数调用的结果传递给pcall。试试这个吧。

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

pcall将以保护模式调用args的chisel方法,并捕获所有后续错误。