我打电话给java.lang.Runtime.exec(...),但这似乎接受命令行作为数组,我想使用单个字符串。替代java.lang.Runtime.exec(),可以执行命令行为单个字符串?
如何使用单个字符串执行相同操作?
我打电话给java.lang.Runtime.exec(...),但这似乎接受命令行作为数组,我想使用单个字符串。替代java.lang.Runtime.exec(),可以执行命令行为单个字符串?
如何使用单个字符串执行相同操作?
当前无法使用命令行将系统命令调用为单个字符串,并且能够指定当前目录。
看来,Java API的缺少这个基本特征:)
的解决方法是使用数组版本,而不是字符串。
从链接的Javadoc:
envp
- 字符串数组,其中每个元件在格式名=值,或null
环境变量设置,如果子进程应该继承当前的环境处理。
因此,只需传递null
作为第二个参数,环境就会被插入。
从文档:
envp
- 字符串数组,其中每个元件在格式名环境变量的设置 = 值,或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;
}
更新
您可以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"));
有一个'Runtime.exec(String command)'方法,请参阅您的链接。每个使用'Runtime.exec(...)'的人都应该阅读:http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html –
@PeterBagyinszki谢谢!现在唯一的问题是我确实想要设置当前目录,并将其作为单个命令运行。 – sorin
还有一个方法:'exec(String command,String [] envp,File dir)' –