【问题标题】:What does setcode mean and how to catch errors inside it?setcode 是什么意思以及如何在其中捕获错误?
【发布时间】:2014-02-28 14:20:08
【问题描述】:

我写了以下事实。外部命令有时会引发错误,我想抓住它。我找到了很多关于如何使用begin...end 块来捕获错误的示例。不幸的是,这些都与setcode do...end 块无关。事实上,我找不到任何关于setcode 的参考资料。任何人都可以对此有所了解吗?

Facter.add(:docexists) do
  setcode do
    cryptdevice = File.read("/home/adam/.cryptdevice")
    if `cryptsetup luksOpen --key-file /home/adam/klucz.bin #{cryptdevice} crypt-tmp`
      tmp = `cryptsetup luksClose crypt-tmp`
      true
    else
      false
    end
  end
end

【问题讨论】:

  • 传入setcode方法的块内的begin-rescue-end块有什么问题?
  • setcode 是来自Facter 的DSL,与您的问题无关。

标签: ruby puppet facter


【解决方案1】:

如果我对您的理解正确,您预计会出现错误

if `cryptsetup luksOpen --key-file /home/adam/klucz.bin #{cryptdevice} crypt-tmp`

线。然后begin-rescue-end 块应该可以工作:

Facter.add(:docexists) do
  setcode do
    begin
      cryptdevice = File.read("/home/adam/.cryptdevice")
      if `cryptsetup luksOpen --key-file /home/adam/klucz.bin #{cryptdevice} crypt-tmp`
        tmp = `cryptsetup luksClose crypt-tmp`
        true
      else
        false
      end
    rescue => e
      # handle error
    end
  end
end

【讨论】:

  • 这看起来更清楚一点:result = (`cryptsetup…` rescue false) && `cryptsetup …`...
  • @mudasobwa 是的,但仅在 OP 不想处理错误但仅返回 false 以防万一时才有效。
猜你喜欢
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 2020-04-22
  • 1970-01-01
相关资源
最近更新 更多