我使用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
发布于 2018-10-10 15:11:50
你快到了。您的问题在于如何使用pcall。Pcall接受一个函数值和您希望调用该函数的任何参数。在您的示例中,您将request_field函数调用的结果传递给pcall。试试这个..。
ok, f = pcall(chisel.request_field, "field")pcall将以受保护的模式调用带有args的chisel方法,并捕获任何后续错误。
https://stackoverflow.com/questions/52735861
复制相似问题