[英]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.