How to catch rake task exit status in another rake task

cie*_*bor 3 ruby rake exit-code exitstatus rake-task

Problem

I have something like this:

task :fail do
  exit 111
end

task :run_fail_and_succeed do
  begin
    Rake::Task['knapsack:fail'].invoke
  rescue
    exit 0
  end
end
Run Code Online (Sandbox Code Playgroud)

我想运行任务:fail并处理它的退出状态。比退出0。我怎样才能做到这一点?

笔记:

  1. 它不能异步/并行/在后台运行。:fail必须在之前完成:run_fail_and_succeed
  2. 不仅以 0 退出会很好,而且可以真正处理这个状态代码,所以我可以根据它的值做不同的事情

Ari*_*iao 5

rescue具有特定类型的异常类型。在您的情况下,这应该是SystemExit. 然后您可以检查与该异常关联的字段。

task :run_fail_and_succeed do
  begin
    Rake::Task['knapsack:fail'].invoke
  rescue SystemExit => e
    puts e.status #=> 111
    # now you can handle your logic according to the exit status
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 如果我在里面运行的任务没有返回异常怎么办?它在内部执行一些命令,此命令失败并显示错误代码,但毕竟没有调用我的救援块。 (3认同)