使用进程生成器或 apache commons exec 执行外部程序

2024-02-14

我需要执行一个外部应用程序,该应用程序返回大量数据(需要 2 个多小时才能完成)并且连续输出数据。

我需要做的是异步执行该程序并将输出捕获到文件中。 我尝试使用 java process builder,但是它似乎仅在程序退出或强制终止时才挂起并返回输出。

我尝试使用进程生成器并生成一个新线程来捕获输出,但仍然没有帮助。

然后我读到了 apache commons exec 并尝试了同样的操作。但是这似乎也花费了很长时间并返回不同的错误代码(对于相同的输入)

CommandLine cmdLine = new CommandLine("/opt/testsimulator");

    DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
    ByteArrayOutputStream stdout = new ByteArrayOutputStream();
    PumpStreamHandler psh = new PumpStreamHandler(stdout);
    ExecuteWatchdog watchdog = new ExecuteWatchdog(60*1000);
    Executor executor = new DefaultExecutor();
    executor.setStreamHandler(psh);
    executor.setWatchdog(watchdog);
    try {
        executor.execute(cmdLine);
    } catch (ExecuteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

任何帮助或工作示例都会非常有帮助


呵呵。使用ProcessBuilder应该适合您的配置。例如,以下模式适合我:

ProcessBuilder pb = new ProcessBuilder("/tmp/x");
Process process = pb.start();
final InputStream is = process.getInputStream();
// the background thread watches the output from the process
new Thread(new Runnable() {
    public void run() {
        try {
            BufferedReader reader =
                new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            is.close();
        }
    }
}).start();
// the outer thread waits for the process to finish
process.waitFor();

我正在运行的程序只是一个带有一大堆的脚本sleep 1 and echo lines:

#!/bin/sh
sleep 1
echo "Hello"
sleep 1
echo "Hello"
...

从进程中读取的线程会输出一个Hello每隔一秒左右。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用进程生成器或 apache commons exec 执行外部程序 的相关文章

  • Java中ArrayList的交集和并集

    有什么方法可以做到这一点吗 我正在寻找 但没有找到 另一个问题 我需要这些方法 以便我可以过滤文件 有些是AND过滤器 有些是OR过滤器 就像集合论中的那样 所以我需要根据所有文件和保存这些文件的联合 相交 ArrayList 进行过滤 我
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后

随机推荐

  • MFC和ATL之间的根本区别是什么?

    假设我是only将它们用于 普通 GUI 程序 没有 COM 没有 ActiveX 没什么花哨的 我将看到 ATL 和 MFC 之间的根本区别是什么 以帮助我弄清楚使用哪一个 我在网上做了一些搜索 但最终没有一个答案真正回答了我的问题 ht
  • 当 MATLAB 找不到我要打开的文件时,阻止 MATLAB 创建新文件

    我经常尝试使用以下命令从 MATLAB 命令窗口打开现有的 MATLAB 文件 edit exampleFile 或者 我可以按cmd shift D并在编辑器中突出显示要打开的函数的名称 但是 如果在使用这两种方法时我希望打开的函数不在路
  • Python 中的埃拉托斯特尼筛法

    我正在尝试编写一个python函数来返回小于给定值的素数个数以及所有素数的值 我需要使用埃拉托斯特尼筛法算法 我相信我在函数中遗漏了一些东西 例如 当我想找到 100 以下的素数时 我得到的只是 2 3 5 7 我知道如果我不使用 平方根
  • Laravel 在 Trait 内重定向

    trait foo public function bar redirect not working use Traits class DonController extend Controller use Traits foo this
  • 如何反转 DataGridView 中的行

    我正在使用数据网格 但这些值没有按照我希望的方式显示 我当前的代码如下 我将如何反转行 string strOutput strLine Split int totalRows Convert ToInt16 strOutput 4 int
  • PHPUnit 中默认运行单个测试套件

    我的 PHPUnit 配置文件有两个测试套件 unit and system 当我运行测试运行程序时vendor bin phpunit 它运行两个套件中的所有测试 我可以通过以下方式定位单个套件testsuite flag vendor
  • 原则 2 紧密联系

    我将doctrine 2 PDO 与mysql 一起使用 对服务器进行压力测试时 mysql 报告大量中止连接 高达 20 我正在尝试找出问题所在 Mysql手册建议确保正确关闭与数据库的连接 http dev mysql com doc
  • 如何在循环中获取当前迭代器项的索引? [复制]

    这个问题在这里已经有答案了 如何获取Python当前项的索引iterator https docs python org 3 7 glossary html term iterator在循环中 例如当使用正则表达式时finditer返回迭代
  • 在javascript中将json对象写入文本文件

    我在 javascript 中有一个 JSON 对象 我想简单地将 JSON 对象写入文本文件 从我到目前为止遇到的事情来看 由于客户端的安全问题 不可能这样做 有解决方法吗 如果最初放置一些虚拟值 是否可以修改已存在的文件 Thanks
  • 如何通过操作base64代码来调整base64图像的大小或更改分辨率?

    有很多将图像编码为 Base64 的示例 有没有办法通过简单地操作实际的 Base64 编码内容来更改该图像的大小或分辨率 您的 base64 代码可能是 iVBORw0KGgoAAAANSUhEUgAAAWQAAAFjCAIAAACFfO
  • Microsoft Azure 媒体服务上的类似 Skype 的应用程序

    目前我正在研究一个类似 Skype 的应用程序的想法 例如 人们与其他人进行视频通话 现在我想运行这个微软Azure媒体服务 http azure microsoft com en us services media services 但是
  • R - 使用 rgl 绘制由平面描述的区域

    我想绘制一个多面体 它由以下不等式描述 3 x 5 y 9 z lt 500 4 x 5 z lt 350 2 y 3 z lt 150 x y z gt 0 它是一个线性规划 目标函数为 4 x 3 y 6 z 多面体是该程序的可行区域
  • R-cran 中使用线条、点或类似颜色填充箱线图

    我需要在 R 中为箱线图使用黑白颜色 我想用线条和点对箱线图进行颜色填充 举个例子 我想ggplot2可以做到这一点 但我找不到任何方法来做到这一点 预先感谢您的帮助 我认为这是一个很好的问题 并思考是否可以在 R 基础上做到这一点并获得方
  • 如何使用 Pyinstaller 捆绑 .jar 文件

    你怎么获得py安装程序 http www pyinstaller org将 jar 文件捆绑为使用它们的 python 项目的档案 例如 要制作一个 exe 文件 我正在使用pyjnius http pyjnius readthedocs
  • 如何将 Integer 转换为 int?

    我正在开发一个网络应用程序 其中数据将在客户端和服务器端之间传输 我已经知道 JavaScript int Java int 因为 Java int 不能为 null 对吧 现在这就是我面临的问题 我将 Java int 变量更改为 Int
  • Android Lollipop 中是否可能有一个不共存的“个人资料所有者”应用程序

    Lollipop API 提供了 2 个新功能 配置文件所有者 和 设备所有者 http developer android com about versions android 5 0 html Enterprise http devel
  • Spring-MVC控制器中触发404?

    我如何获得Spring http en wikipedia org wiki Spring Framework3 0控制器触发404 我有一个控制器 RequestMapping value method RequestMethod GET
  • Android 的氛围

    首先 我打算使用气氛 https github com Atmosphere atmosphere在服务器端和客户端都有一个带有 WebView 的 Android 应用程序 我将在其中使用 jQuery 但是 稍后计划推出更 标准 的 A
  • SSRS 包含或类似表达式

    我正在尝试从数据集中的字段创建计算表达式 我需要从一个字段中查找包含 交易所交易 一词的所有内容 并且在我的新字段中包含 ETF 13F 一词 如果没有任何匹配 那么它就只是空白 我已经尝试过喜欢 交易所交易 并包含 交易所交易 函数 并且
  • 使用进程生成器或 apache commons exec 执行外部程序

    我需要执行一个外部应用程序 该应用程序返回大量数据 需要 2 个多小时才能完成 并且连续输出数据 我需要做的是异步执行该程序并将输出捕获到文件中 我尝试使用 java process builder 但是它似乎仅在程序退出或强制终止时才挂起