【问题标题】:How should I call a Perl Script in Java?我应该如何在 Java 中调用 Perl 脚本?
【发布时间】:2010-10-10 20:28:53
【问题描述】:

我读到Runtime.getRuntime().exec("perl script.pl") 是一个选项,但这是最好的方法吗?

我需要那个脚本的答案,所以在某些情况下我必须读取脚本的返回值,但在其他情况下我可能会从文本文件中读取它。

无论如何,exec() 是从 Java 调用 Perl 脚本的好方法吗?我应该注意,我正在开发一个 Java Web 应用程序,所以这里的安全性是一个问题。

【问题讨论】:

标签: java perl


【解决方案1】:

您可以使用Runtime.getRuntime().exec() 或使用Process API。 Process API 允许您获取脚本的输出,因此您可以同时进行通信。

exitValue()getInputStream() 似乎是您需要的。

【讨论】:

  • 在 Windows 机器上运行 Java 代码时使用以下代码: process = r.exec("cmd /c perl D:\\perlexamples\\hello.pl");
【解决方案2】:

这概述了如何相当优雅地做到这一点,尽管它可能比它值得付出更多的努力: http://search.cpan.org/~nwclark/perl-5.8.9/jpl/docs/Tutorial.pod

概述:
得到 JPL 的良好支持,但这是一个复杂的过程:

JPL 预处理器解析 .jpl 文件并为 Perl 方法生成 C 代码包装器。它还生成 Java 和 Perl 源文件。

C 编译器编译包装器并将其链接到 libPerlInterpreter.so 共享库,从而为包装器生成一个共享库。

Java 编译器编译 Java 源文件,该文件使用本地方法加载包装器。

包装器将 Java 代码连接到 Perl 源文件中的 Perl 代码。

幸运的是,通用的 Makefile.PL 简化了该过程。这是一个为您生成 Makefile 的 Perl 脚本。

【讨论】:

  • JPL 已从 Perl 5.10 中删除。我不建议采用死 API。改用 Inline::Java。
【解决方案3】:

exec() 可能是最好的选择,您可以使用exitValue() 捕获它的返回值。您可能还对Inline::Java 感兴趣。

-约翰

【讨论】:

    【解决方案4】:

    请记住,无论 Perl 脚本创建什么文件,它都是在 Java 工作文件夹中创建的。只需将该文件称为'./myPerlCreatedFile.ext'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多