2010-03-31 16 views
6

Bir grup jython ve java kodunu bir araya getiren bir uygulama üzerinde çalışıyorum. Programın doğası gereği (wsadmin kullanarak) gerçekten Python 2.1Python'u kullanarak bir python komut dosyasını bir jar dosyasının içine nasıl çağırırsınız?

ile sınırlıyız. Şu anda hem java hem de .py modüllerini içeren bir kavanoz var. Kod şu anda java kullanılarak çağrılmaktadır, ancak bunu jython'a olabildiğince çok işlevsellik aktarma lehine çıkarmak istiyorum.

Sahip olduğum sorun, varolan jar dosyasının içindeki python modüllerini arama jython komut dosyasından almak veya yürütmek istememdir. Başarısız birkaç farklı yolu denedim. Denedim

application.jar 
    |-- com 
     |--example 
      |-- action 
       |-- MyAction.class 
       |-- pre_myAction.py 

1 yaklaşım kavanoz ithalatı yapmak oldu: gibi

Benim dizin yapısı görünüyor. Kavanozu sys.path'e ekledim ve hem import com.example.action.myAction hem de import myAction'u kullanarak modülü almayı denedim. Ancak, her seviyede init .py dosyalarını dizine koyduğumda bile başarı yok.

Çalıştığım ikinci yaklaşım, kaynağı java sınıfını kullanarak yüklemek oldu. Bu yüzden aşağıdaki kodu yazdım: Bunların her ikisi de başarısız oldu. Şimdi nasıl devam edeceğime dair bir kayıp yaşıyorum. Herhangi bir fikir ?

şerefe,

Trevor benim için

+0

nelerdir 'scriptName' ve 'scriptStr' içeriğinin? – badp

+0

Kavanoz dosyasında. Jython'u çağırdığımdaki sınıf yolunda. Eğer sys.path yazdırırsam orada görürsünüz. Sadece kapsamlı olmak için sys.path.append() kullanarak kodu doğrudan koda eklemeye çalıştım ama herhangi bir fark yaratmadı. – Trevor

+0

'zipimport''a (http://docs.python.org/library/zipimport.html) ve en alttaki örneğe bakın. "Init.py" yazdığınızda, __init __. Py' anlamına mı geliyor? –

cevap

5

aşağıdaki işleri:

import sys 
import os 

import java.lang.ClassLoader 
import java.io.InputStreamReader 
import java.io.BufferedReader 

loader = java.lang.ClassLoader.getSystemClassLoader() 
stream = loader.getResourceAsStream("com/example/action/myAction.py") 
reader = java.io.BufferedReader(java.io.InputStreamReader(stream)) 

script = ""       
line = reader.readLine() 
while (line != None) : 
    script += line + "\n" 
    line = reader.readLine() 

exec(script) 
  1. 'script'
  2. exec komut ile bir dize olarak sınıfyolundan Komut yükleniyor Neler
  3. nedir
+0

Bu gerçekten iyi bir cevap. Biraz daha basit bir şey umuyordum, ama bunun en iyi seçenek olabileceğini düşünüyorum. – Trevor

+0

Merhaba, lütfen bu senaryoyu nasıl çalıştırmamız gerektiğini ekleyebilir misiniz? teşekkür ederim –

İlgili konular