【问题标题】:Run exec file using Java on Mac在 Mac 上使用 Java 运行 exec 文件
【发布时间】:2017-01-09 10:28:28
【问题描述】:

我需要使用bash 启动服务器,因此我创建了一个 UNIX shell,但我无法使用 Eclipse 中的 Java 执行它。

我尝试了以下不起作用的代码:

Process proc = Runtime.getRuntime().exec(./startServer);

这是startServer 文件的内容:

#!/bin/bash
cd /Users/sujitsoni/Documents/bet/client
npm start

【问题讨论】:

  • 为什么 Eclipse 很重要?那是一个 IDE。
  • 请格式化您的代码。换目录后有换行吗?
  • 我正在自动化一个 web 应用程序,它需要服务器启动,所以我需要运行这个命令。
  • 当你说它不起作用时,实际发生了什么?如果显示错误,您应该明确告诉我们它是什么,如果执行停止且没有任何错误,您应该这样说。
  • 如果你使用"./startServer",脚本必须和当前java目录在同一个目录。这可能有点难以猜测,具体取决于您如何启动它(在 Eclipse 的情况下,它很可能是项目根目录)。我会改为对脚本使用绝对 ath。

标签: java npm


【解决方案1】:

您可以尝试以下两个选项。

选项 1

Process proc = Runtime.getRuntime().exec("/bin/bash", "-c", "<Abosulte Path>/startServer");

选项 2

ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "<Absolute Path>/startServer");
pb.directory(new File("<Absolute Path>"));
Process proc = pb.start();

【讨论】:

  • java.io.IOException: 无法运行程序“/Users/sujitsoni/Documents/workspace/ElectronApplication/startServer”(在目录“/Users/sujitsoni/Documents/workspace/ElectronApplication/startServer”中): error=20, 不是目录
  • 查看更新。 “/Users/sujitsoni/Documents/workspace/ElectronApplication”看起来像一个 Windows 系统,但你说它是 UNIX 上的基本脚本。
【解决方案2】:

有几件事可能会出错:

  • 对于 Eclipse,您提供的文件路径可能是错误的,它可以采用 relative path,但在命令行中,它将采用绝对路径。

  • error=13, Permission denied - 如果脚本文件没有所需的权限。在您的情况下,情况可能并非如此,因为您没有收到任何错误。

  • 最后,您正在通过 java 程序执行脚本,因此您的脚本的输出不会被打印出来。在您的情况下,可能就是这种情况。您需要从 BufferedReade 捕获脚本的输出并打印出来。 (在您的情况下,服务器可能已经启动,但您没有看到脚本的日志/输出。 有关打印输出,请参见下面的代码示例。

    public static void main(String[] args) throws IOException, InterruptedException {
    
           Process proc = Runtime.getRuntime().exec("./startServer");
           proc.waitFor();
           StringBuffer output = new StringBuffer();
           BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
           String line = "";
           while ((line = reader.readLine()) != null) {
                output.append(line + "\n");
           }
           System.out.println(output);
    
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 2014-11-08
    • 2014-09-19
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多