无需流捕获即可调用外部程序的最简单方法



从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 版本似乎不可用。 (随时欢迎发表评论。

此信息的提示最初由马尔科·托波尔尼克提供。

相关内容

  • 没有找到相关文章

最新更新