Java:BufferedReader从Python脚本和regex实时读取自我更新的shell输出,每5秒更新一次

2024-06-16 10:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是:我有一个Python脚本来生成Shell输出。输出如下:

Result: good.

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

最后一行更新自身并成为结果:良好或结果:坏线。最后一行再次更新自身并删除前一行。我找到了一种在python脚本中禁用这种行为的方法,但是最好只对shell输出的最后一行进行regex,而不修改python脚本。在

现在,如果让我在输出上运行这个Java代码,它不会显示想要的结果(如果有的话)。在

计时器像我预期的那样运行前3次,然后停止1分钟,然后输出50行regexed输出,甚至是错误的输出。在

所需的结果是将第一个括号、第二个括号和第三个括号输出到不同的guiswing标签中,然后从pythonshell输出中每隔n秒更新一次这些标签。在

        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);
        }

Tags: 脚本newinputlinegroup标签systemregex
1条回答
网友
1楼 · 发布于 2024-06-16 10:53:16

尝试不使用BufferedReader直接使用InputStreamReader

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

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

相关问题 更多 >