2011-06-07 130 views
2

在下面的代碼,我只是用Jython蟒蛇文件通過Jython的訪問

public static void main(String[] args) { 
    org.python.util.PythonInterpreter python = new org.python.util.PythonInterpreter(); 
    python.execfile("test.py"); 
    ... 

我的問題執行從Java代碼test.py是test.py需要在從那裏jar文件同一目錄運行。
我需要這個jar包內的test.py,並且仍然可以使用jython來執行它。

How do you invoke a python script inside a jar file using python?中建議的方法使用ClassLoader類中的getResourceAsStream方法讀取字符串中的腳本不會爲我工作,因爲我的test.py將更多的python腳本導入所有捆綁在jar中的腳本。

作爲新到Java和Jython我真的很困惑。
任何幫助將不勝感激..!

回答

6

您可以簡單地把test.py在罐子裏的根,以組織,因爲他們會在正常的蟒蛇FS其他腳本。 然後,你可以做這樣的事情:

public static void main(String[] args) { 
    org.python.util.PythonInterpreter python = new org.python.util.PythonInterpreter(); 
    python.exec("import test"); 
    python.exec("test.callsomthing()"); 
} 

在test.py進口應該工作正常,包括導入來自test.py.其他模塊

+0

謝謝!你知道如何使用netbeans將文件放在jar的根目錄嗎? (對不起,我還沒有使用過的包裝罐) – Nullpoet 2011-06-08 05:56:44

+0

瞭如何在罐的根從http://stackoverflow.com/questions/3955299/netbeans-adding-resource-files-to-jar-file-with-ant添加。非常感謝!! stackoverflow rocks :) – Nullpoet 2011-06-08 12:35:51

+0

@Daniel我正在面對_ImportError:沒有模塊名爲test_'class test: def __init __(self): pass def hello(self): print(「Hello Python function call ..!」) test.py在同一個文件夾中。 – 2016-07-11 13:18:34

0

通過使用「的getResourceAsStream」之類的提取從罐子蟒蛇文件。

見例如:http://fiji.sc/wiki/index.php/Jython_Scripting#Distributing_jython_scripts_in_a_.jar_file

+0

據我所知,你的建議是在讀一整串的python文件,然後execuing它什麼作爲http://stackoverflow.com/questions/2551269/how-do-you-invoke-a-python-script建議 - 內部-A-JAR文件 - 使用 - 蟒蛇。但問題是我有多個python模塊,所以從這個test.py中導入的jar中的更多python模塊不會以這種方式工作。 – Nullpoet 2011-06-07 03:31:38

+1

@Nullpoet,'PythonInterpreter'類具有執行文件的方法,對於只聲明函數和類的腳本,它相當於加載它。因此,將它們全部加載到相同的'PythonInterpreter'實例中,然後執行依賴於其他腳本的腳本。 另一種方法是將所有.py文件複製到一個臨時目錄中,然後使用以下命令將該目錄添加到類路徑中:'from sys import path; path.append('/ path/to/temp/dir')' – 2011-06-18 13:38:24