2012-02-21 12 views
8

मैं जावा प्रोजेक्ट के भीतर ज्योथन का उपयोग कर रहा हूं।जावा क्लास से पाइथन विधि कैसे कॉल करें?

मैं एक जावा वर्ग है: myJavaClass.java और एक अजगर वर्ग: myPythonClass.py

public class myJavaClass{ 
    public String myMethod() { 
     PythonInterpreter interpreter = new PythonInterpreter(); 
     //Code to write 
    } 
} 

अजगर फ़ाइल इस प्रकार है:

class myPythonClass: 
    def abc(self): 
     print "calling abc" 
     tmpb = {} 
     tmpb = {'status' : 'SUCCESS'} 
     return tmpb 

अब समस्या मैं के abc() विधि कॉल करना चाहते है मेरी पाइथन फ़ाइल myMethod मेरी जावा फ़ाइल की विधि और परिणाम प्रिंट करें।

+1

What've आप की कोशिश की? क्या आपने इसे देखा है: http://www.jython.org/archive/21/docs/embedding.html? – grifaton

उत्तर

12

अगर मैं the docs सही पढ़ा, तो आप सिर्फ eval समारोह का उपयोग कर सकते कर सकते हैं

PyObject str = interpreter.eval("repr(myPythonClass().abc())"); 
System.out.println(str.toString()); 

आप जावा चर से कुछ इनपुट के साथ यह आपूर्ति करने के लिए चाहते हैं, आप set beforeh उपयोग कर सकते हैं: एक स्ट्रिंग प्राप्त करने के लिए और और की तुलना में अपने अजगर कोड के भीतर है कि चर नाम का उपयोग करें:

interpreter.set("myvariable", Integer(21)); 
PyObject answer = interpreter.eval("'the answer is: %s' % (2*myvariable)"); 
System.out.println(answer.toString()); 
+0

तो क्या मुझे कोड की एक पंक्ति की आवश्यकता है जैसे: दुभाषिया.एवल ("myPythonClass()। Abc (myvariable)"); – Hasti

+0

@ashti: हाँ, यह आपकी कक्षा के 'abc' विधि के लिए तर्क के रूप में' myvariable' की आपूर्ति करेगा। मैंने यह दिखाने के लिए एक और उदाहरण जोड़ा कि नव निर्मित चर का उपयोग कैसे करें। –

+0

आपकी सहायक जानकारी के लिए बहुत बहुत धन्यवाद। समस्या सुलझ गयी! – Hasti

1

बिल्कुल ऐसा करने का कोई तरीका नहीं है (जिसे मैं जानता हूं)।

आप लेकिन कुछ विकल्प हैं:

1) इस तरह जावा के भीतर से अजगर निष्पादित करें:

try { 
    String line; 
    Process p = Runtime.getRuntime().exec("cmd /c dir"); 
    BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
    while ((line = bri.readLine()) != null) { 
     System.out.println(line); 
    } 
    bri.close(); 
    while ((line = bre.readLine()) != null) { 
     System.out.println(line); 
    } 
    bre.close(); 
    p.waitFor(); 
    System.out.println("Done."); 
} 
catch (Exception err) { 
    err.printStackTrace(); 
} 

2) आप शायद Jython है जो "अजगर प्रोग्रामिंग के एक कार्यान्वयन का उपयोग कर सकते जावा में लिखी गई भाषा ", वहां से आप जो चाहते हैं वह कर सकते हैं।

interpreter.execfile("/path/to/python_file.py"); 
PyDictionary result = interpreter.eval("myPythonClass().abc()"); 

या यदि आप चाहते हैं:

3) आप दो आवेदन एक सॉकेट या साझा फ़ाइल के साथ किसी भी तरह से संवाद,

+0

वह पहले से ही 'पायथन इंटरप्रेटर' का उपयोग कर रहा है, जो एक [जेथॉन क्लास] है (http://www.jython.org/javadoc/org/python/util/PythonInterpreter.html)। –

+0

ओह, * पायथन * टैग तब भ्रमित है। –

+0

वह क्यों है? ज्योथन * पाइथन का कार्यान्वयन है। फिर भी, मैंने प्रश्न में [jython] टैग जोड़ा। –

3

हम एक अजगर समारोह मापदंडों है चलाने के लिए, और परिणाम की जरूरत है, हम सिर्फ इस मुद्रित करने के लिए की जरूरत है:

import org.python.core.PyObject; 
import org.python.core.PyString; 
import org.python.util.PythonInterpreter; 

public class method { 

public static void main(String[] args) { 

    PythonInterpreter interpreter = new PythonInterpreter(); 
    interpreter.execfile("/pathtoyourmodule/somme_x_y.py"); 
    PyObject str = interpreter.eval("repr(somme(4,5))"); 
    System.out.println(str.toString()); 

} 

सोम्मे स्टैंडअलोन जार - अजगर मॉड्यूल somme_x_y.py में समारोह

def somme(x,y): 
    return x+y 
0

आप download here Jython 2.7.0 कर सकते है।

फिर ...

  1. ग्रहण में अपने जावा पथ में जोड़ने ......
  2. पैकेज एक्सप्लोरर (बाईं ओर) में, सही अपने जावा परियोजना का चयन करें और गुण पर क्लिक करें ।
  3. बाईं ओर के पेड़दृश्य में, जावा बिल्ड पथ का चयन करें।
  4. लाइब्रेरी टैब का चयन करें।
  5. बाहरी जार जोड़ें ...
  6. अपने ज्योथन इंस्टॉलेशन (सी: \ jython2.5.2 मेरे लिए) पर ब्राउज़ करें, और jython.jar चुनें।
  7. लागू करें और बंद करें पर क्लिक करें।
फिर

...

Java class (main) //use your won package name and python class dir 
----------------- 
package javaToPy; 
import org.python.core.PyObject; 
import org.python.util.PythonInterpreter; 

public class JPmain { 

    @SuppressWarnings("resource") 
    public static void main(String[] args) { 

    PythonInterpreter interpreter = new PythonInterpreter(); 

    //set your python program/class dir here 
    interpreter.execfile 
    ("C:\\Users\\aman0\\Desktop\\ME\\Python\\venv\\PYsum.py"); 

    PyObject str1 = interpreter.eval("repr(sum(10,50))"); 
    System.out.println(str1.toString()); 

    PyObject str2 = interpreter.eval("repr(multi(10,50))"); 
    System.out.println(str2.toString()); 


    interpreter.eval("repr(say())"); 


    interpreter.eval("repr(saySomething('Hello brother'))"); 

} 

} 

--------------------------- 
Python class 
------------ 

def sum(x,y): 
    return x+y 

def multi(a,b): 
    return a*b 

def say(): 
    print("Hello from python") 

def saySomething(word): 
    print(word)`enter code here` 
संबंधित मुद्दे