Java:BufferedReader从Python脚本读取自更新的shell输出,并每隔5秒更新一次regexes live
问题是:我有一个生成Shell输出的Python脚本。此输出如下所示: 结果:很好 [123速度][456良好][789不良] 最后一行会自动更新,并成为result:good或result:bad行。然后,最后一行会自动更新并删除上一行。我找到了一种在python脚本中禁用此行为的方法,但是最好只在shell输出的最后一行使用regex,而不改变python脚本 现在,如果让我在输出上运行这个Java代码,它不会显示想要的结果(如果有的话) 计时器像我预期的那样运行前3次,然后停止1分钟,然后输出50行regexed输出,甚至是错误的输出 期望的结果是将第一个括号、第二个括号和第三个括号输出到不同的GUI Swing标签中,然后从python shell输出每隔n秒更新这些标签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分钟,然后
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进程太好了!我试试看。你有没有关于如何实现这一目标的例子?