问题是这样的:我有一个生成 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/