如何验证从Perl执行的R脚本的正常终止?

时间:2010-09-08 06:45:53

标签: perl r return-value

我编写了一个 shebang R脚本,并希望从Perl脚本执行它。我目前使用system ($my_r_script_path, $r_script_arg1, $r_script_arg2, ...),我的问题是如何验证R脚本是否正常终止(没有错误或警告)。

猜我应该让我的R脚本在最后返回一些真值,只要一切正常,然后在Perl中捕获这个值,但我不知道该怎么做。

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以在命令quit()中设置返回值,例如q(status=1)。默认值为0,另请参阅?退出。如何在Perl中捕获那个,就像捕获Perl中的任何其他返回值一样。如果我没记错的话,它会保存在特殊变量$?中。另请参阅system的perldoc中的示例,应该在那里进行说明。

在旁注中,我只使用R-Perl界面。您可以在此处找到信息和示例: http://www.omegahat.org/RSPerl/

为了完整性:

在脚本的开头,您可以输入类似的内容:

options(
    warn=2, # This will change all warnings into errors,
            # so warnings will also be handled like errors
    error= quote({
      sink(file="error.txt"); # save the error message in a file
      dump.frames();
      print(attr(last.dump,"error.message"));
      sink();
      q("no",status=1,FALSE) # standard way for R to end after errors
    })
)

这将保存错误消息,并在不保存的情况下中断R会话,退出代码为1且不运行.Last。

尽管如此,如果你更经常这样做,R-Perl接口提供了更多可能值得一试的可能性。