java - 使用 commons-exec 流输出?

标签 java streaming apache-commons-exec

谁能给我一个例子,说明如何流式传输使用 DefaultExecutor 执行的外部程序的输出?我没有找到任何描述如何执行此操作的文档。

我的外部进程会运行几个小时,所以仅仅抓取所有输出数据是不可行的;它必须流式传输。

最佳答案

注意:此解决方案是同步的,因此不会流式传输。您需要在单独的线程中阅读,或使用执行命令的异步版本。

private InputStream getStream() {

 String dataParsingCommand = "java";

PipedOutputStream output = new PipedOutputStream();
PumpStreamHandler psh = new PumpStreamHandler(output);

CommandLine cl = CommandLine.parse(command);
cl.addArgument("-jar");
cl.addArgument(dataParserPath);

DefaultExecutor exec = new DefaultExecutor();
DataInputStream is = null;
try {
    is = new DataInputStream(new PipedInputStream(output));
    exec.setStreamHandler(psh);
    exec.execute(dataParserCommandLine);
} catch (ExecuteException ex) {
} catch (IOException ex) {
}

return is;
}

关于java - 使用 commons-exec 流输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2702277/

相关文章:

java - 配置为监听端口 80 的 Tomcat 连接器启动失败

java - 从 Java 的 HashCode 中获取值

java - 如何检查点是否在对角线周围的矩形内?

java - 异步网络服务流

java - 为什么 "git pull"exec 命令卡住并且不打印任何内容?

java - 如何摆脱 "Unchecked cast"警告?

flash - JW Player 需要流媒体服务器?

java - 优雅地杀死 Apache Commons Exec 进程

java - 从 java 执行的 rsync 返回文件未找到错误

video - 拍摄实时视频流并将图像分成三份进行广播的最佳方式?