2011-08-04 60 views
3

我正在研究一個大的Java項目,其中Jython腳本是從Java代碼解釋的。出於我尚未解決的原因,除非函數,類,變量被聲明爲全局,否則Jython腳本中沒有任何工作。 爲了追查這個問題,我把問題縮小到了這個範圍。下面是:簡單的Jython腳本不能從Java運行

  • Jython腳本script.py當與java -jar jython.jar script.py它使用的Jython 2.2的方法來試圖解釋上述

Python腳本給出的Jython腳本

  • 一個Java主類Interpreter.java推出運行良好:

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

    Java類:

    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 
    

    有關如何更正Java類以便解釋器可以運行Jython腳本的任何想法?謝謝 !

  • 回答

    2

    我無法解釋,你得到的錯誤,但我可以使它工作使用PythonInterpreter

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

    是啊,這對我來說也有效!我想我的應用程序應該使用這個而不是'__builtin__'的調用 – Axel

    +0

    有沒有一個選項可以在scala中執行相同的操作? –

    +0

    @EdwinVivekN:我不確定你的意思。如果您需要幫助,您應該提出一個新問題。 – mzjn