Java:BufferedReader 从 Python 脚本和正则表达式实时读取 self 更新的 shell 输出,每 5 秒更新一次

标签 java python regex bash timer

问题是这样的:我有一个生成 Shell 输出的 Python 脚本。此输出如下所示:

Result: good.

[123 SPEED] [456 GOOD] [789 BAD]

最后一行自行更新并成为 result:good 或 result:bad 行。然后最后一行再次更新自身并删除前一行。我找到了一种在 python 脚本中禁用此行为的方法,但最好只使用正则表达式 shell 输出的最后一行而不更改 python 脚本。

现在,如果我在该输出上运行此 Java 代码,它不会显示所需的结果(如果有)。

计时器前 3 次按照我的预期运行,然后停止 1 分钟,然后输出 50 行正则表达式输出,甚至是错误的输出。

期望的结果是将第一个括号、第二个括号和第三个括号输出到不同的 GUI Swing 标签中,然后每 n 秒从 python shell 输出更新这些标签。

        try {
            p = Runtime.getRuntime().exec("myScript.py -Switches");
            pReg = Pattern.compile("\\[(.*?)\\]");
            ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
            exec.scheduleAtFixedRate(new Runnable() {
              @Override
              public void run() {
                   try {
                      BufferedReader input =
                            new BufferedReader(new InputStreamReader(p.getInputStream()));
                        if ((line = input.readLine()) != null) {
                            // regex
                            Matcher m = pReg.matcher(line);
                            int h = 0;
                            while(m.find()) {
                               myHashArray[h] = m.group(1);
                               h++;
                               Sytem.out.println(m.group(1));
                            }
                        }
                  }
                   catch (IOException e1) {
                        System.err.println(e1);
                        System.exit(1);
                   }
                }
            }, 0, 500, TimeUnit.MILLISECONDS);
        }

        catch (IOException ea) {
            System.exit(0);
        }

最佳答案

尝试不使用BufferedReader——直接使用InputStreamReader——

或者让 python 进程在每个括号内的项目之间输出新行

BufferedStreamReader 正在等待缓冲区填充或等待新行,然后再将任何内容返回到 Java 进程

关于Java:BufferedReader 从 Python 脚本和正则表达式实时读取 self 更新的 shell 输出,每 5 秒更新一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658339/

相关文章:

regex - 在Microsoft Word 2013中查找并替换为正则表达式

java - 整数数组的 ArrayList

java - 另一种不使用 "*"运算符将两个数字相乘的方法

java - Android - fragment 不显示

python - matplotlib 轮廓可以匹配像素边缘吗?

python - 如何根据 Python 中另一个列表的(子列表)索引对列表进行分区

java - 没有底层框架的java服务器在哪里托管?

python - find_elements_by_css_selector 没有给我任何输出,如何处理?

Python正则表达式,重复数据

ruby-on-rails - 如何在已被 Rails 转义的正则表达式中转义\\?