从Java调用外部程序而不捕获stdin/stdout/stderr流的最简单方法是什么? 调用外部程序的一种简单方法是 sth
Runtime.getRuntime().exec(new String[] { "/bin/ls", "-la" });
但是这会捕获该程序的输出,因此要将其放在控制台上,我需要将其包装在诸如此类的怪物中:
p = Runtime.getRuntime().exec(new String[] { "/bin/ls", "-la" });
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
但是,当然,如果我对这些流不感兴趣(这里只传递了 stdout),那么首先将它们重定向到我,然后再传递它们是无稽之谈。
有没有更简单的方法来实现这一点? 我想我只想调用一个没有流重定向的外部程序。
从版本 1.7 开始,类ProcessBuilder
知道一个方法inheritIO()
可以在创建进程来实现此目的之前调用该方法:
ProcessBuilder pb = new ProcessBuilder(new String[] { "ls", "-la" });
pb.inheritIO();
Process p = pb.start();
exitValue = p.waitFor();
但是,像这样的 1.6 版本似乎不可用。 (随时欢迎发表评论。
此信息的提示最初由马尔科·托波尔尼克提供。