提前离开groovy脚本(system.exit(0)除外)的最佳方法是什么

提前离开groovy脚本(system.exit(0)除外)的最佳方法是什么,groovy,Groovy,过早离开groovy脚本的最佳方法是什么 groovy脚本从给定的信息文件中读取一行,然后进行一些验证工作,如果验证失败(数据不一致),脚本需要提前离开流。然后系统将再次调用脚本以读取同一信息文件的下一行 代码示例: read a row try{ //make some verification here }catch(Exception e){ logger("exception on something occurred "+e,e) //here need t

过早离开groovy脚本的最佳方法是什么

groovy脚本从给定的信息文件中读取一行,然后进行一些验证工作,如果验证失败(数据不一致),脚本需要提前离开流。然后系统将再次调用脚本以读取同一信息文件的下一行

代码示例:

 read a row
 try{
   //make some verification here
 }catch(Exception e){
    logger("exception on something occurred "+e,e)
    //here need to leave a groovy script prematurely
 }
只需使用
系统。退出(0)


您可以使用退出状态代码指示您遇到问题的行

零值表示一切正常,正值表示行号。然后,您可以让groovy脚本将起始行作为输入参数


这是一个幼稚的实现,如果一行是空的,则只有一个愚蠢的异常

file = new File(args[0])
startLine = args[1].toInteger()

file.withReader { reader ->
    reader.eachLine { line, count ->
        try {
            if (count >= startLine) {
                if (line.length() == 0) throw new Exception("error")
                println count + ': ' + line
            }
        } catch (Exception ignore) {
            System.exit(count)
        }
    }
}

我很确定,您可以从脚本中
返回

只需使用return:

 read a row
 try{
  //make some verification here
 }catch(Exception e){
   logger("exception on something occurred "+e,e)
   //here need to leave a groovy script prematurely
   return
 }

使用return0

 read a row
 try{
   //make some verification here
 }catch(Exception e){
    logger("exception on something occurred "+e,e)
    return 0;
 }

要在您停止的地方重新启动将是您的问题。。。您不能将循环移到调用groovy的任何程序中,然后验证脚本中的每一行吗?或者给脚本传递一个BufferedReader,它可以用来读取行,但会在脚本调用之间保持状态?感谢您的评论,在我的案例中,服务器正在执行所有例行作业。如果您的try catch不在另一个try catch中,您可以抛出一个新的ExceptionThank供您建议,但我不能使用system。在我的案例中,退出(0),(很抱歉,一开始我没有提到),我在找另一个solution@Toren好的,但是如果你能用更多的信息更新你的问题,那就太好了。然后我相信你会得到一个适合你需要的答案。这导致詹金斯关机。我想知道到目前为止,它导致了多少次意外关机。请@KrzysztofJabło ski,告诉我在报告中提到詹金斯的地方原始问题。我将等待对它的引用。顺便说一句,标题中的
(除了system.exit(0))
部分是在我的答案发布后添加的。我尝试了一个简单的脚本,但似乎不起作用。脚本(两行):
#!/usr/bin/groovy return 1;
运行脚本后,
echo$?
在我的ubuntu机器上显示0而不是1。rry,我的答案是关于过早地离开groovy脚本。老实说,我没有尝试使用实际的返回值。
 read a row
 try{
   //make some verification here
 }catch(Exception e){
    logger("exception on something occurred "+e,e)
    return 0;
 }