java.lang.Runtime.exec()的替代方法,可以将命令行作为单个字符串执行?

时间:2012-06-01 16:04:27

标签: java runtime runtime.exec

我正在调用java.lang.Runtime.exec(...),但这似乎接受命令行作为数组,我想使用单个字符串。

如何使用单个字符串执行相同操作?

4 个答案:

答案 0 :(得分:2)

来自链接的Javadocs:

  

envp - 字符串数组,其中每个元素的格式为 name = value 的环境变量设置,如果子进程应继承环境,则为null当前的过程。

所以只需传递null第二个参数,就会有环境。

答案 1 :(得分:2)

如果您为第二个参数传递null,则将继承当前环境。

如果要修改当前环境,可以从System.getEnv()构建它,如下所示:

private static String[] getEnv() {
    Map<String, String> env = System.getenv();
    String[] envp = new String[env.size()];
    int i = 0;
    for (Map.Entry<String, String> e : env.entrySet()) {
        envp[i++] = e.getKey() + "=" + e.getValue();
    }
    return envp;
}

<强>更新

您可以使用System.out.println(System.getenv("PATH"));

检查Java路径

如果路径正常,请尝试

String[] commands = new String[] { "bash", "-c", "python foo/bar.py" };
Runtime.getRuntime().exec(commands, null, new File("/workingDir"));

答案 2 :(得分:1)

来自文档:

  

envp - 字符串数组,其中每个元素的格式为 name = value 的环境变量设置,如果是null子进程应该继承当前进程的环境。

听起来你想要传递null这个论点。

答案 3 :(得分:0)

目前无法使用命令行作为单个字符串调用系统命令,并且无法指定当前目录。

似乎Java API缺少这个基本功能:)

解决方法是使用数组版本而不是字符串。