首页 \ 问答 \ 简单的Jython脚本不能从Java运行(Simple Jython script doesn't run from Java)

简单的Jython脚本不能从Java运行(Simple Jython script doesn't run from Java)

我正在开发一个大型Java项目,其中Jython脚本是从Java代码解释的。 由于我还没有想到的原因,除非函数,类,变量全部声明为全局,否则Jython脚本中没有任何作用。 为了追查这个问题,我已经将问题缩小到了这个范围。 以下是:

  • 一个Jython脚本script.py在使用java -jar jython.jar script.py启动时运行良好
  • 一个Java主类Interpreter.java ,它使用Jython 2.2方法来尝试和解释上面给出的Jython脚本

Python脚本:

#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脚本的任何想法? 谢谢 !


I am working on a big Java project, where Jython scripts are interpreted from Java code. For a reason I have not yet figured out, nothing works in the Jython script unless functions, class, variables, are declared all as global. In an attempt to track down this problem, I have narrowed the issue down to this. Below are :

  • A Jython script script.py which runs well when launched with java -jar jython.jar script.py
  • A Java main class Interpreter.java which uses Jython 2.2 methods to try and interpret the Jython script given above

Python script :

#global aFunction # uncommenting this makes the script work from Java

def main():
    aFunction()


def aFunction():
    print 'aFunction() called'


main()

Java class :

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();
        }

    }

}

Here is the error I get when running the Java class.

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

Any ideas on how to correct the Java class so that the interpreter can run the Jython script ? Thanks !


原文:https://stackoverflow.com/questions/6941765
更新时间:2024-03-30 16:03

最满意答案

ORDER BY length(word) DESC LIMIT 1

ORDER BY length(word) DESC LIMIT 1

相关问答

更多
  • 不使用短路评估的原因: 因为如果您的函数,属性Gets或运算符方法具有副作用,它将表现出不同的结果并产生不同的结果。 这可能与以下情况相冲突:A)语言标准,B)以前版本的语言,或C)典型用户的默认语言假设。 这些是VB不短路的原因。 因为您可能希望编译器拥有自由地重新排序和修剪表达式,运算符和子表达式的自由度,而不是按照用户键入的顺序进行排序。这些是SQL不会短路的原因(或者至少不像大多数开发人员认为的那样)。 因此,SQL(和其他一些语言) 可能会短路,但前提是它决定并不一定按照您隐式指定的顺序。 我在这 ...
  • 是的,JavaScript有“短路”评估。 if (true == true || foo.foo){ // Passes, no errors because foo isn't defined. } 现场演示 if (false && foo.foo){ // Passes, no errors because foo isn't defined. } 现场演示 Yes, JavaScript has "short-circuit" evaluation. if (true == t ...
  • ANSI SQL Draft 2003 5WD-01-Framework-2003-09.pdf 6.3.3.3规则评估顺序 [...] 如果优先级不是由格式或括号确定的,则表达式的有效评估通常从左到右进行。 然而, 实现依赖于表达式是否实际上是从左到右进行评估,特别是当操作数或操作符可能引起条件时, 或者如果可以确定表达式的结果而不完全评估表达式的所有部分。 ANSI SQL Draft 2003 5WD-01-Framework-2003-09.pdf 6.3.3.3 Rule evaluation o ...
  • 这里短路的含义是,只要布尔结果建立,评估就会停止。 perl -E "@x=qw/a b c d/; for (qw/b w/) { say qq($_ - ), $_ ~~ @x ? q(ja) : q(nein) }" 对于输入b ,Perl不会在@x查看b后面的元素。 另一方面,您引用的文档引用的内置grep会处理整个列表,即使所需的所有内容都可能是布尔值。 perl -E "@x=qw/a b c/; for (qw/b d/) { say qq($_ - ), scalar grep $_, @ ...
  • ORDER BY length(word) DESC LIMIT 1 ORDER BY length(word) DESC LIMIT 1
  • 我认为这就是答案。 Mysql使用不同的计划,不能执行延迟评估(o“hort-circuit”)。 mysql> explain select * from avatar order by id; +----+-------------+--------+-------+---------------+---------+---------+------+-------+-------+ | id | select_type | table | type | possible_keys | key ...
  • 这里的问题只是对实际发生的一种误解。 折叠表达式中如何进行短路评估 ? 它可用折叠表达式。 (args && ... )遵循与(a && b && c && d)完全相同的规则。 也就是说,只有在a , b和c都评估为真的情况下才会评估d。 这不是你们两种情况之间的实际差异。 false && (*pb = true); // ok at runtime. AndL(false, (*pb = true)); // error at runtime! 虽然折叠表达式与非折叠表达式完全相同, ...
  • 我认为您发布的示例并不是说明短路的好方法。 我知道你说你已经看过其他的例子,但也许还有一个会做到这一点。 如果你有这样的东西使用三元组: var fruit = apple ? apple : banana; 这段代码的意图是“如果苹果是真的,我希望水果等于苹果。否则,水果应该等于香蕉。” 使用短路的等效方法如下所示: var fruit = apple || banana 由于布尔逻辑的工作方式,此代码执行相同的操作。 || 运算符意味着OR。 你可能已经知道了。 但是如果你考虑一下,只要||一面 算 ...
  • 是。 在Ruby标准的最终草案中, all? 定义如下: 在接收器上调用each方法 对于每个方法的each元素X: 如果给出了块,则以X为参数调用块。 如果此调用返回falseish对象,则返回 false 。 如果没有给出块,并且X是虚假对象,则返回 false 。 返回true 。 请注意步骤2中的单词return 。这保证了短路评估。 any? 被类似地定义。 然而,标准仍然是一个草案,我不知道哪些Ruby实现(如果有的话)的目标是符合标准。 Yes. In the final draft of t ...

相关文章

更多

最新问答

更多
  • linux环境下怎么用maven编译一个已有的java项目?
  • Ionic2和IonicDeploy(Ionic2 and IonicDeploy)
  • 尝试分组和别名数据时出错(Error when Attempting to Group and Alias Data)
  • Facebook PHP API错误代码100:API中提供的appsecret_proof无效(Facebook PHP API Error code 100: Invalid appsecret_proof provided in the API)
  • 不用u盘和光盘怎么安装linux系统
  • 表名作为变量参数(Table name as variable parameter)
  • 我想学计算机 在望京花园住 附近那有这样的地方可以学
  • 删除原始记录的重复项(Removing duplicates with original records)
  • Pandas:使用.astype(str)时忽略空值?(Pandas: ignore null values when using .astype(str)?)
  • Python新手阵列 - 列表转换[重复](Python newbie array - list conversion [duplicate])
  • java.lang.String cannot be cast to java.lang.Float
  • 带参数的选择器(Selector with argument)
  • python中的for循环语法(for loop syntax in python)
  • Nunit - 无法检索类别属性(NUnit - Can't retrieve a category property)
  • python3 xpath无法到达子节点(AttributeError:'NoneType'对象没有属性'text')(python3 xpath can't reach a child node (AttributeError: 'NoneType' object has no attribute 'text'))
  • Android自动 - 如何启用开发人员模式(Android auto - how to enable developer mode)
  • java weka stringtowordvector没有正确计算单词出现次数(java weka stringtowordvector is not counting word occurences properly)
  • 如何解释DHT响应中的“节点”?(How to interpret 'nodes' in a DHT response?)
  • 什么是使用opencv和树莓相机模块进行人脸检测的最佳算法(What is the best algorithm for face detection using opencv and raspberry camera module)
  • 可以somone解释这两个问题的解决方案(c程序,mutex,线程)吗?(Can someone explain the solution of these two questions (c program,mutex,threads)?)
  • 如何解决SyntaxError:意想不到的令牌var gulp(How to fix SyntaxError: Unexpected token var in gulp)
  • 在满足R中的第一个实例后,在所有行中分配值(Assign value in all rows following satisfaction of first instance in R)
  • 如何记录Atk4 auth /登录事件(How to log Atk4 auth/login event)
  • 是否有必要在新的scala项目中添加我的自定义scala库依赖项?(is it necessary to add my custom scala library dependencies in new scala project?)
  • Java中对象类的继承(Inheritance of Object Class in Java)
  • 如何在jquery自动完成中获取当前元素?(How to get current element in jquery autocomplete?)
  • 学电子商务甚么大学好
  • @Override在java中(@Override in java)
  • 虚拟机中怎么给linux装office
  • Laravel邮件参数(sendmail / smtp)(Laravel mail parameters (sendmail/smtp))