2010-05-06 4 views
1

기본적으로 파이썬에서 getWindowText()를 사용하여 열린 창에서 텍스트를 가져 와서 화면에 출력하는 스크립트가 있습니다. 파이썬은 윈도우의 텍스트가 바뀌면서 반복합니다. 따라서 변경 사항이 출력되므로 파이썬의 출력은 항상 윈도우 텍스트로 최신 상태가됩니다.Java/Python : 통합, 텍스트 업데이트 루핑 문제

파이썬 스크립트를 프로세스로 실행하고 버퍼링 된 리더를 사용하여 출력 한 텍스트를 읽음으로써 자바 프로그램에서이 텍스트에 액세스하려고합니다.

텍스트의 첫 번째 블록은 제대로 작동하지만 이후에는 더 이상 읽지 않습니다. 파이썬이 출력 한대로 텍스트를 읽지 않습니다.

누군가가이 문제에 대해 밝힐 수 있습니까? 내가 인쇄하는 간단한 파이썬 프로그램을 작성하여 오류를 재현 할 수 있었다 생각

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(); 
} 
+0

누구? 내가 다르게 할 수있는 일이나 비슷한 상황에 대한 어떤 생각이라도 대단히 감사 할 것입니다. – Jivings

답변

1

... 나는 자이 썬을 시도하고 사용하려고 해요,하지만 난 정말 문제가 여기에 무엇인지 알고 싶습니다 다음 임의의 숫자와 잠 : 여기

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() 

흥미로운 비트는 자바 코드가 처음 몇 인쇄 에코하지만 그 나머지를 인쇄하기 전에 프로그램이 완료 될 때까지 기다립니다 것입니다. 이 예제 코드의 문제점은 Python 스크립트의 출력이 stdout에 버퍼되어 Java 응용 프로그램에서 읽을 수 없다는 점입니다. sys.stdout.flush() 명령의 주석을 제거하면 올바르게 작동합니다.

여러분의 python 프로그램에 flush()를 추가하고 문제가 해결되는지 확인해 보겠습니다.

+0

Genius. 매우 감사합니다! – Jivings