2011-08-04 7 views
3

자이 썬 스크립트가 자바 코드로 해석되는 커다란 자바 프로젝트에서 일하고있다. 필자가 아직 알아 내지 못한 이유 때문에 함수, 클래스, 변수가 모두 전역 변수로 선언되지 않는 한 자이 썬 스크립트에서는 아무 것도 작동하지 않는다. 이 문제를 추적하기 위해이 문제를 좁혀 냈습니다. 아래는 :간단한 자이 썬 스크립트가 자바에서 실행되지 않는다.

파이썬 스크립트 위에서 주어진 자이 썬 스크립트를 시도하고 해석하는 자이 썬 2.2 방법을 사용 java -jar jython.jar script.py

  • 자바 기본 클래스 Interpreter.java으로 시작하면 잘 실행되는 자이 썬 스크립트 script.py :

    #global aFunction # uncommenting this makes the script work from Java 
    
    def main(): 
        aFunction() 
    
    
    def aFunction(): 
        print 'aFunction() called' 
    
    
    main() 
    

    자바 클래스 :

    ,536,
    import java.io.File; 
    
    import org.python.core.PyException; 
    import org.python.core.PyStringMap; 
    import org.python.core.PySystemState; 
    
    
    public class Interpreter { 
    
        public static void main(final String[] args) { 
         final PyStringMap localNameSpace = new PyStringMap(); 
         final PyStringMap globalNameSpace = new PyStringMap(); 
    
         final File scriptFile = new File("../../jython/script.py");  
         PySystemState.initialize(); 
    
         try { 
          org.python.core.__builtin__.execfile(scriptFile.getAbsolutePath(), globalNameSpace, localNameSpace); 
         } catch (final PyException pyException) { 
          pyException.printStackTrace(); 
         } 
    
        } 
    
    } 
    

    다음은 Java 클래스를 실행할 때의 오류입니다.

    Traceback (innermost last): 
        File "/opt/coflight/axel/workspace/essais/../../jython/script.py", line 12, in ? 
        File "/opt/coflight/axel/workspace/essais/../../jython/script.py", line 5, in main 
    NameError: aFunction 
    

    인터프리터가 자이 썬 스크립트를 실행할 수 있도록 자바 클래스를 수정하는 방법에 대한 아이디어가 있으십니까? 감사 !

  • 답변

    2

    나는 당신이 얻을 오류를 설명 할 수 없다,하지만 난 PythonInterpreter를 사용하여 작동하게 할 수 있었다 :뿐만 아니라 나를 위해 작동

    org.python.util.PythonInterpreter interp = new org.python.util.PythonInterpreter(); 
    String scriptname = "script.py"; 
    interp.execfile(scriptname); 
    
    +0

    그래! 내 응용 프로그램이'__builtin__ '호출 대신 이것을 사용하기로되어 있었다고 생각합니다. – Axel

    +0

    스칼라에서 같은 작업을 수행 할 수있는 옵션이 있습니까? –

    +0

    @EdwinVivekN : 무슨 뜻인지 잘 모르겠습니다. 도움이 필요하면 새로운 질문을해야합니다. – mzjn