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

Dav*_*d B 7 perl r return-value

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

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

谢谢!

Jor*_*eys 4

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

顺便说一句,我只使用 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
    })
)
Run Code Online (Sandbox Code Playgroud)

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

尽管如此,R-Perl 界面还是提供了更多的可能性,如果您打算更频繁地这样做,那么值得一试。