如何在一个rake任务中捕获另一个rake任务的退出状态

3

问题

我有如下内容:

task :fail do
  exit 111
end

task :run_fail_and_succeed do
  begin
    Rake::Task['knapsack:fail'].invoke
  rescue
    exit 0
  end
end

我想运行任务:fail并处理其退出状态。最后以0的状态退出。我该怎么做?

注:

  1. 它不能是异步/并行/在后台运行。 :fail 必须在 :run_fail_and_succeed 之前完成。
  2. 如果不仅仅是退出值为0,而是真正处理这个状态码,那就更好了,这样我就可以根据其值进行各种不同的操作。
1个回答

6
使用特定类型的异常类型进行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

3
如果我在内部运行的任务没有返回异常怎么办?它在内部执行了一些命令,这些命令失败并返回错误代码,但是我的救援块却没有被调用。 - ciembor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接