繁体   English   中英

Java使用PythonInterpreter调用Python函数

[英]Java calling Python function using PythonInterpreter

我有一个python模块auth.py:

keys= {
    "s1": ["k1", "k2"],
    "s2": ["k1", "k2"]
}

def get_keys_by_name(name):
    return keys[name]

和调用的Java代码:

String keyname= "somename"
interpreter.exec("from services.framework import auth");
List<String> keys = (List<String>) interpreter
                .eval("auth.get_keys_by_name(" + keyname+ ")");

每次我调用代码时,我都会收到一个NameError形式的参数(键名),我尝试将其传递给python代码。

有人知道我在做什么错吗?

我认为您的问题是python解释器将java变量键名解释为python程序中的Python变量,而不是字符串。 在引号周围添加引号,不会出现此错误。 我换句话

而不是使用:

List<String> keys = (List<String>) interpreter
            .eval("auth.get_keys_by_name(" + keyname+ ")");

用这个:

List<String> keys = (List<String>) interpreter
            .eval("auth.get_keys_by_name('" + keyname+ "')");

根据要求我的评论作为答案:)

将值为abc的键传递给eval("auth.get_keys_by_name(" + keyname+ ")")会导致对auth.get_keys_by_name(abc)进行求值,即解释器可能会查找名为abc的变量,因为该变量不会存在你得到一个NameError

添加引号(我不是python专家,所以我不知道单引号还是双引号会更好)应该可以解决此问题,即eval("auth.get_keys_by_name(\\"" + keyname + "\\")") auth.get_keys_by_name("abc")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM