簡體   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