<p>我试图使用Jython从Java中运行一段Python。如果使用exec语句导入,则一切正常。</p>
<pre><code>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
</code></pre>
<p>然而,如果我试着把这两条线结合起来,一切都会失控。这:</p>
<pre><code>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')"); // ....
</code></pre>
<p>…引发异常<code>"no viable alternative at input 'import'", ('<string>',1,0,'import re\n')</code>。</p>
<p>这很重要,因为理想情况下,我希望能够将整个脚本作为单个字符串进行求值,而不必将导入拆分为单独的部分。我做错什么了吗?有没有其他方法告诉Jython“获取整个脚本块(包括导入)并运行它,然后返回结果”?这需要在运行时——将Python预编译成<code>.class</code>文件不是一个选项。</p>