Jythonを使用して、Java内からPythonのスニペットを実行しようとしています。execステートメントを使用してインポートすると、すべてが機能します。
PythonInterpreter pi = new PythonInterpreter();
pi.exec("import re");
PythonObject o = pi.eval("re.match('abc', 'abc123')"); // returns a MatchObject
o = pi.eval("re.match('abc', 'def123')"); // returns Py.None
しかし、私が2つの線を組み合わせようとすると、すべての地獄が解き放たれます。これ:
PythonInterpreter pi = new PythonInterpreter();
pi.eval("import re"); // exception!
PythonObject o = pi.eval("re.match('abc', 'abc123')"); // never gets here
o = pi.eval("re.match('abc', 'def123')"); // ....
...例外をスローします"no viable alternative at input 'import'", ('<string>',1,0,'import re\n')
。
理想的には、インポートを別の部分に分割することなく、スクリプト全体を単一の文字列として評価できるようにしたいので、これは重要です。私は何か間違ったことをしていますか?Jythonに「インポートを含むこのスクリプトのブロブ全体を取得して実行し、結果を返す」ように指示する別の方法はありますか?.class
これは実行時に行う必要があります。Pythonをファイルに事前コンパイルすることはできません。