2011-08-04 8 views
3

私は大きなJavaプロジェクトで作業しています.JythonスクリプトはJavaコードから解釈されます。私がまだ分かっていない理由で、関数、クラス、変数がすべてグローバルとして宣言されていない限り、Jythonスクリプトでは何も動作しません。 この問題を追跡するために、私はこの問題をこれまでに絞りました。以下は、次のとおりです。シンプルなJythonスクリプトがJavaから実行されない

Pythonスクリプト上で与えられたJythonスクリプトを試してみて、解釈するのJython 2.2のメソッドを使用していますjava -jar jython.jar script.py

  • AのJavaメインクラスInterpreter.javaを立ち上げたときにも実行されるJythonスクリプトscript.py

    #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 
    

    インタプリタがJythonスクリプトを実行できるようにJavaクラスを修正する方法についてのアイデアはありますか?ありがとう!

  • 答えて

    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

    関連する問題