调用外部程序而不捕获流的最简单方法

时间:2014-12-09 13:44:48

标签: java stream exec io-redirection external-process

从Java 调用外部程序而不捕获stdin / stdout / stderr流的最简单方法是什么?调用外部程序的简单方法就像

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 个答案:

答案 0 :(得分:0)

从版本1.7开始,类ProcessBuilder知道一个方法inheritIO(),可以在创建进程之前调用它:

ProcessBuilder pb = new ProcessBuilder(new String[] { "ls", "-la" });
pb.inheritIO();
Process p = pb.start();
exitValue = p.waitFor();

但是这样的1.6版本似乎不可用。 (备注总是受欢迎的。)

此信息的提示最初由Marko Topolnik提供。