저는 자이 썬과 자바 코드가 흩어져있는 응용 프로그램을 만들고 있습니다. 프로그램의 특성상 (wsadmin 사용) 우리는 실제로 파이썬 2.1로 제한됩니다.파이썬을 사용하여 jar 파일에서 파이썬 스크립트를 어떻게 호출합니까?
현재 자바 소스와 .py 모듈을 모두 포함하는 jar 파일이 있습니다. 이 코드는 현재 java를 사용하여 호출되지만 가능한 한 많은 기능을 자이 썬으로 마이그레이션하기 위해이 코드를 제거하고 싶습니다.
내가 가진 문제는 파이썬 모듈을 호출하는 jython 스크립트의 기존 jar 파일 내부에서 가져 오거나 실행하고 싶다는 것입니다. 나는 성공하지 않고 몇 가지 다른 방법을 시도했다. 내가 시도
application.jar
|-- com
|--example
|-- action
|-- MyAction.class
|-- pre_myAction.py
제 1 회 접근법은 항아리에서 수입을 할 수 있었다 : 같은
내 디렉토리 구조가 보인다. jar 파일을 sys.path에 추가하고 모두 import com.example.action.myAction 및 import myAction을 사용하여 모듈을 가져 오려고했습니다. 그러나 각 레벨의 디렉토리에 .py 파일을 넣어도 성공하지 못합니다.
제가 시도한 두 번째 방법은 자바 클래스를 사용하여 리소스를로드하는 것이 었습니다. 그래서 아래 코드를 작성했습니다 :
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"
두 가지 모두 실패했습니다. 내가 어떻게해야하는지에 관해서는 약간의 손실이 있습니다. 어떤 아이디어?
환호,
트레버 나를 위해
무엇입니까? 'scriptName'과'scriptStr'의 내용? – badp
jar 파일에 있습니다. jython을 호출 할 때 classpath에 있습니다. sys.path를 출력하면 거기에 나타납니다. 그냥 철저하게 나는 sys.path.append()를 사용하여 코드에 직접 항아리를 추가하려했지만 아무런 차이가 없었습니다. – Trevor
'zipimport' (http://docs.python.org/library/zipimport.html)와 하단의 예를보십시오. 'init.py'를 쓸 때,'__init __. py'를 의미합니까, 맞습니까? –