【问题标题】:Running Ruby script from Java从 Java 运行 Ruby 脚本
【发布时间】:2017-02-13 08:39:31
【问题描述】:

我正在尝试通过执行以下操作从 Java 运行 Ruby 脚本:

public static void main(String[] args) {
    try {
        Process process = Runtime.getRuntime().exec("ruby /path/to/file/file.rb");
        process.waitFor();
        System.out.println(process.exitValue()); 
    } 
    catch (Exception e) {
        e.printStackTrace();
    }
}

当我运行它时,我得到1 作为退出值。在我的 Ruby 脚本中,我使用的是 Watir 和 Nokogiri,因此应该使用浏览器。什么都没有发生。

如果我将ruby /path/to/file/file.rb 复制到我的终端,它会正常运行。为什么这不能正常工作?

【问题讨论】:

  • 当 Java 运行时,它是从您的帐户以您的权限运行,还是作为另一个不同的用户运行?该用户的权限是否正确? Ruby 知道它的库/宝石在哪里吗?
  • ruby 版本和你在终端上运行的一样吗?您必须确保 java 运行时进程中的环境(环境变量、加载的 ruby​​ 版本、gem 集(如果有))是相同的
  • @Guilherme 我如何检查它们是否是相同的版本?
  • @user081608 你能打印 Runtime.getRuntime().exec("export") 和 Runtime.getRuntime().exec("ruby -v") 的输出吗?
  • 看起来当我运行时我得到了 2.0.0p648 版本,而我的终端是 2.4.0p0 版本。这些会有什么不同? JVM 有自己的 Ruby 吗?

标签: java ruby-on-rails ruby


【解决方案1】:

您需要使用标准输出和标准错误流来从您的流程中获取输出并找出问题所在。查看“Using a thread to capture process output”的答案。

【讨论】:

    猜你喜欢
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2013-03-12
    • 1970-01-01
    • 2013-02-18
    • 2012-03-14
    • 2018-09-22
    相关资源
    最近更新 更多