我正在调用java.lang.Runtime.exec(...)但这似乎接受命令行作为数组,我想使用单个字符串。
如何使用单个字符串做同样的事情?
我正在调用java.lang.Runtime.exec(...)但这似乎接受命令行作为数组,我想使用单个字符串。
如何使用单个字符串做同样的事情?
从链接的 Javadocs:
envp
- 字符串数组,其中每个元素都有格式为 name=value的环境变量设置,或者null
子进程是否应该继承当前进程的环境。
所以只要传入null
第二个参数,环境就会被继承。
如果您传递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;
}
更新
您可以检查您的Java路径System.out.println(System.getenv("PATH"));
如果路径没问题,然后尝试
String[] commands = new String[] { "bash", "-c", "python foo/bar.py" };
Runtime.getRuntime().exec(commands, null, new File("/workingDir"));
从文档中:
envp
- 字符串数组,其中每个元素都具有格式name = value的环境变量设置,或者null
子进程是否应该继承当前进程的环境。
听起来您想通过null
该论点。
目前没有办法使用命令行作为单个字符串调用系统命令并且能够指定当前目录。
似乎 Java API 缺少这个基本功能:)
解决方法是使用数组版本而不是字符串。