Pracuję nad aplikacją, która przeplata kilka jython i kodu Java. Ze względu na naturę programu (za pomocą wsadmin) tak naprawdę jesteśmy ograniczeni do Pythona 2.1Jak wywołać skrypt Pythona wewnątrz pliku jar przy użyciu Pythona?
Mamy obecnie słoik zawierający zarówno źródło java, jak i .py. Kod jest obecnie wywoływany za pomocą java, ale chciałbym go usunąć na korzyść migracji jak najwięcej funkcjonalności do jython.
Problem polega na tym, że chcę importować lub uruchamiać moduły python wewnątrz istniejącego pliku JAR ze skryptu wywołującego jython. Próbowałem na kilka różnych sposobów bez powodzenia.
Moja struktura katalogów wygląda następująco:
application.jar
|-- com
|--example
|-- action
|-- MyAction.class
|-- pre_myAction.py
The 1st podejście próbowałem było zrobić import ze słoika. Dodałem słoik do mojego sys.path i spróbowałem zaimportować moduł, używając zarówno importu importu com.example.action.myAction jak i import myAction. Bez powodzenia, nawet gdy wstawiam pliki init do katalogu na każdym poziomie.
Drugie podejście, które próbowałem, to załadowanie zasobu przy użyciu klasy java. Więc napisałem poniższy kod:
import sys
import os
import com.example.action.MyAction as MyAction
scriptName = str(MyAction.getResource('/com/example/action/myAction.py'))
scriptStr = MyAction.getResourceAsStream('/com/example/action/myAction.py')
try:
print execfile(scriptStr)
except:
print "failed 1"
try:
print execfile(scriptName)
except:
print "failed 2"
Oba te elementy nie powiodły się. Trochę tracę teraz informacji na temat tego, jak powinienem postępować. Jakieś pomysły ?
okrzyki,
Trevor
czym są zawartość 'scriptName' i' scriptStr'? – badp
W pliku jar. Jest na ścieżce klasowej, gdy wzywam jython. Jeśli wydrukuję sys.path, zobaczysz go tam. Po prostu starałem się dodać słoik bezpośrednio do kodu przy użyciu sys.path.append(), ale nie robiło to żadnej różnicy. – Trevor
Spójrz na 'zipimport' (http://docs.python.org/library/zipimport.html) i na przykład na dole. Kiedy piszesz 'init.py', to znaczy' __init __. Py', prawda? –