Java/Python:集成,循环更新文本的问题

Java/Python:集成,循环更新文本的问题,java,python,Java,Python,基本上我有一个Python脚本,它使用getWindowText()从打开的窗口获取文本并将其输出到屏幕。python循环,因此当窗口中的文本更改时,它输出更改,因此python的输出将始终与窗口文本保持同步 我试图通过将python脚本作为一个进程执行并使用缓冲读取器读取它输出的文本来访问Java程序中的文本 出于某种原因,这对第一个文本块很好,但此后将不再读取,它不会在python输出文本时读取文本的任何更新 有人能解释一下吗?我将尝试使用Jython,但我真的很想知道这里的问题是什么 tr

基本上我有一个Python脚本,它使用getWindowText()从打开的窗口获取文本并将其输出到屏幕。python循环,因此当窗口中的文本更改时,它输出更改,因此python的输出将始终与窗口文本保持同步

我试图通过将python脚本作为一个进程执行并使用缓冲读取器读取它输出的文本来访问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();
}

我想我可以通过编写一个简单的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()命令的注释时,它可以正常工作


我会尝试向您的python程序添加一个flush(),看看这是否解决了问题。

我想我可以通过编写一个简单的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()命令的注释时,它可以正常工作


我会尝试在python程序中添加一个flush(),看看是否可以解决这个问题。

有人吗?任何关于我可以做什么不同的想法,或类似的情况都将不胜感激。有人吗?任何关于我可以做什么不同的想法,或类似的情况都将不胜感激。