3
我正在研究一個大的Java項目,其中Jython腳本是從Java代碼解釋的。出於我尚未解決的原因,除非函數,類,變量被聲明爲全局,否則Jython腳本中沒有任何工作。 爲了追查這個問題,我把問題縮小到了這個範圍。下面是:簡單的Jython腳本不能從Java運行
- Jython腳本
script.py
當與java -jar jython.jar script.py
它使用的Jython 2.2的方法來試圖解釋上述
Python腳本給出的Jython腳本
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腳本的任何想法?謝謝 !
是啊,這對我來說也有效!我想我的應用程序應該使用這個而不是'__builtin__'的調用 – Axel
有沒有一個選項可以在scala中執行相同的操作? –
@EdwinVivekN:我不確定你的意思。如果您需要幫助,您應該提出一個新問題。 – mzjn