Java / Python: интеграция, проблема с циклическим обновлением текста - PullRequest
1 голос
/ 06 мая 2010

В основном у меня есть скрипт на Python, который берет текст из открытого окна с помощью getWindowText () и выводит его на экран. Питон зацикливается, так как текст в окне изменяется, он выводит изменения, поэтому вывод питона всегда будет актуальным с текстом окна.

Я пытаюсь получить доступ к этому тексту в моей Java-программе, выполняя скрипт python как процесс и читая текст, который он выводит, с использованием буферизованного читателя.

По какой-то причине это работает нормально для первого блока текста, но после этого больше не будет читать, он не будет читать никаких обновлений текста, когда его выводит питон.

Может кто-нибудь пролить свет на это? Я собираюсь попробовать Jython, но мне бы очень хотелось узнать, в чем здесь проблема ...

try {
  Runtime r = Runtime.getRuntime();
  Process p = r.exec("cmd /c getText.py");
  BufferedReader br = new BufferedReader(
                                new InputStreamReader(p.getInputStream()));
  int line;
  while (true) {
    line = br.read();
    System.out.print((char) line);
  }
} catch (Exception e) {
    e.printStackTrace();
}

1 Ответ

1 голос
/ 21 мая 2010

Я думаю, что смог воспроизвести вашу ошибку, написав простую программу на Python, которая печатает случайные числа и затем засыпает:

import random
import time
import sys

random.seed(time.time())

print 'starting random numbers'
#sys.stdout.flush()
print 'big block of text' * 2000
#sys.stdout.flush()

count = 3

while count > 0:
    sleeper = random.randint(1, 5)
    r = random.randint(1000, 9000)
    print r, 'sleeping for', sleeper, 'seconds'
    #sys.stdout.flush()
    time.sleep(sleeper)
    count -= 1

print 'random numbers finished, closing'
#sys.stdout.flush()

Интересным моментом здесь является то, что java-код будет отображать первые несколько отпечатков, но затем будет ждать, пока программа не будет завершена, прежде чем она напечатает остальные. Проблема с этим примером кода заключается в том, что выходные данные скрипта Python буферизуются в stdout, поэтому приложение Java не может их прочитать. Он работает правильно, когда вы раскомментируете команды sys.stdout.flush ().

Я бы попробовал добавить flush () в вашу программу на python и посмотреть, решит ли это проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...