Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:BufferedReader从Python脚本读取自更新的shell输出,并每隔5秒更新一次regexes live_Java_Python_Regex_Bash_Timer - Fatal编程技术网

Java:BufferedReader从Python脚本读取自更新的shell输出,并每隔5秒更新一次regexes live

Java:BufferedReader从Python脚本读取自更新的shell输出,并每隔5秒更新一次regexes live,java,python,regex,bash,timer,Java,Python,Regex,Bash,Timer,问题是:我有一个生成Shell输出的Python脚本。此输出如下所示: 结果:很好 [123速度][456良好][789不良] 最后一行会自动更新,并成为result:good或result:bad行。然后,最后一行会自动更新并删除上一行。我找到了一种在python脚本中禁用此行为的方法,但是最好只在shell输出的最后一行使用regex,而不改变python脚本 现在,如果让我在输出上运行这个Java代码,它不会显示想要的结果(如果有的话) 计时器像我预期的那样运行前3次,然后停止1分钟,然后

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

结果:很好

[123速度][456良好][789不良]

最后一行会自动更新,并成为result:good或result:bad行。然后,最后一行会自动更新并删除上一行。我找到了一种在python脚本中禁用此行为的方法,但是最好只在shell输出的最后一行使用regex,而不改变python脚本

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

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

期望的结果是将第一个括号、第二个括号和第三个括号输出到不同的GUI Swing标签中,然后从python shell输出每隔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);
        }

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

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


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

太好了!我试试看。你有没有关于如何实现这一目标的例子?