Проблема заключается в следующем: у меня есть скрипт Python, который генерирует вывод Shell. Этот вывод выглядит следующим образом:
Результат: хорошо.
[123 СКОРОСТЬ] [456 ХОРОШЕЕ] [789 ПЛОХО]
Последняя строка сама обновляется и становится либо результатом: хорошим, либо результатом: плохая строка. Затем последняя строка обновляется и стирает предыдущую. Я нашел способ отключить это поведение в скрипте python, но было бы хорошо, если бы только регулярное выражение отображало последнюю строку вывода оболочки без изменения скрипта python.
Теперь, если я позволю запустить этот код Java над этим выходом, он отображает не нужные результаты, если они есть.
Таймер работает, как я ожидаю, в первые 3 раза, затем он останавливается на 1 минуту, а затем выводит 50 строк с регулярным выражением и даже не тот.
Желаемый результат состоит в том, чтобы вывести первую скобку, вторую скобку и третью скобку в отдельные метки GUI Swing, а затем обновить эти метки каждые n секунд с выхода оболочки python.
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 directly--
Или процесс python выводит новые строки между каждым элементом в скобках
BufferedStreamReader ожидает заполнения буфера или для новой строки, прежде чем он вернет что-либо в ваш Java-процесс