【问题标题】:Java execute command in OSXOSX中的Java执行命令
【发布时间】:2015-04-05 09:28:07
【问题描述】:

我有一个命令在输入到终端时没有问题,虽然我想从 java 程序中执行它。
我正在使用此代码,其中“homedir”是通过在终端输入 which spark 找到的。

String homedir = "/usr/local/bin/spark";
File wd = new File(homedir);
Process pwd = Runtime.getRuntime().exec("spark", null, wd);

当我运行代码时,我仍然收到错误:Cannot run program "spark" (in directory "/usr/local/bin"): error=2, No such file or directory

我错过了什么阻止它工作?

【问题讨论】:

    标签: java macos exec


    【解决方案1】:

    运行ls -lah /usr/local/bin/spark,你可能会发现它是一个指向别处的符号链接。如果是这样,您需要将其指定为工作目录。你也可以通过说wd.getCanonicalPath() 来获得 Java 中的路径。

    或者,如果可以选择使用 Process pwd = Runtime.getRuntime().exec("/usr/local/bin/spark/spark");

    所以要指定一个参数,你可以说: Runtime.getRuntime().exec("/usr/local/bin/spark/spark list");

    要回读结果,请使用以下内容: 你可以直接说.exec("/usr/local/bin/spark/spark"); 要得到结果,只需使用类似的内容:

    BufferedReader reader = new BufferedReader(new InputStreamReader(
            pwd.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String line = "";
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }
    
    System.out.println(sb.toString());
    

    【讨论】:

    • 使用.exec("/usr/local/bin/spark/spark"); 似乎可以消除错误但什么也不返回。我怎么能用这个发送不同的字符串?例如“spark list”或“spark call...”。运行ls -lah /usr/local/bin/spark 给了我一条新路径/usr/local/bin/spark -> ../lib/node_modules/spark-cli/bin/spark.js。虽然切换到这个目录也会给我同样的旧错误。
    • @StudBeepile 我已经更新了我的答案以获得更多详细信息。我希望这能解决问题。
    • 所以尝试wd.getCanonicalPath() 似乎并没有让我有任何不同的路径。我不确定我是否正确使用它:wd.getCanonicalPath(); 我也尝试过:File path = new File(wd.getCanonicalPath()); 尝试运行.exec("/usr/local/bin/spark/spark"); 我得到了返回:Cannot run program "/usr/local/bin/spark/spark": error=20, Not a directory。我完全被难住了。
    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 2017-01-26
    • 2012-04-17
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多