2012-06-22 3 views

답변

2
당신은 다른 무언가로 System.out을 리디렉션해야

..

는, 당신은 (있는 경우 그것은 아마도 더 나은 문제

final GroovyClassLoader classLoader = new GroovyClassLoader(); 
Class groovy = classLoader.parseClass(new File("script.groovy")); 
GroovyObject groovyObj = (GroovyObject) groovy.newInstance(); 

ByteArrayOutputStream buffer = new ByteArrayOutputStream() ; 
PrintStream saveSystemOut = System.out ; 
System.setOut(new PrintStream(buffer)) ; 

groovyObj.invokeMethod("main", null); 

System.setOut(saveSystemOut) ; 
String output = buffer.toString().trim() ; 

을 공격 할거야 우리는 스크립트를 작성하여 시스템에 덤프하기보다는 무언가를 리턴 할 수 있도록 할 수있다.

+0

xx 많이 작동한다. 이 방법을 사용하겠습니다 만 그루비 스크립트를 다시 작성할 수 있습니다 – hudi

+1

@hudi : [다른 질문] (http://stackoverflow.com/questions/11737904)에서이 코드가 webapp에서 실행 중임을 언급합니다. Tim이 지적했듯이 ** 멀티 스레드 환경에서는 ** 작동하지 않습니다. 그리고 웹 애플리케이션은 본질적으로 다중 스레드입니다. 직접 테스트하는 경우 작동하는 것처럼 보일 수 있지만 동시에 두 사람이 동시에 요청을하면 출력이 끔찍하게 엉망이됩니다. –

+0

이 응용 프로그램은 admin = one person을 사용해야하지만 경고는 thx를 사용해야합니다. – hudi

관련 문제