我正在调用java.lang.Runtime.exec(...),但这似乎接受命令行作为数组,我想使用单个字符串。
如何使用单个字符串执行相同操作?
答案 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"));
如果路径正常,请尝试
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缺少这个基本功能:)
解决方法是使用数组版本而不是字符串。