【问题标题】:How to determine if sysdig field exists or handle error if it doesn't如何确定 sysdig 字段是否存在或如果不存在则处理错误
【发布时间】:2018-10-10 08:29:59
【问题描述】:

我正在使用 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 &lt;field&gt;") 仍然存在。

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

谢谢 史蒂夫·H

【问题讨论】:

    标签: lua sysdig


    【解决方案1】:

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

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

    pcall 将调用 chisel 方法并在受保护模式下使用您的 args 并捕获任何后续错误。

    【讨论】:

    • 谢谢,成功了。仅供其他人稍后发现错误仍然显示,但它不再终止脚本。
    猜你喜欢
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2017-01-15
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多