दिलचस्प पोस्ट
मैं .NET में कंप्यूटर का नाम कैसे प्राप्त करूं कैसे अजाक्स का उपयोग कर पीएचपी फ़ाइल में छवि भेजने के लिए? उद्देश्य सी के बजाय कोको के साथ सी ++ का उपयोग करें? कैसे चेक करें कि मैप में जाने वाली कोई कुंजी है? क्या मुझे जैक्सन के ऑब्जेक्टमैपर को एक स्थिर क्षेत्र के रूप में घोषित करना चाहिए? बल लेआउट () का उपयोग, अनुरोध लेआउट () और अमान्य () कैसे सी # में एमएस कार्यालय दस्तावेजों से पाठ निकालने के लिए क्या कोई साइट ब्राउज़र एक्सटेंशन खोल सकता है? दो सूचियों का प्रतिच्छेदन खोजें? दबाया <बटन> सीएसएस आईफोन पर पोर्टफोलियो में यूआईएसप्लिट वीयूआई कंट्रोलर मास्टर के बजाय वीसी के विस्तार से पता चलता है एक बाहरी फाइल सिस्टम या डेटाबेस से फेसलेट टेम्पलेट / फ़ाइलें प्राप्त करना डेटा फ्रेम की सूची क्यों नहीं std :: cout आउटपुट पूरी तरह से गायब हो जाता है जब यह नल को भेजा जाता है सीएसएस के साथ पीडीएफ के रूप में एक पूर्व तत्व सहेजें

जावा में पायथन कॉलिंग?

मैं सोच रहा हूं कि जावा कोड का इस्तेमाल करते हुए जावा अजगर से अजगर कार्यों को कॉल करना संभव है या क्या यह अजगर से जावा कोड को कॉल करने के लिए ही है?

वेब के समाधान से एकत्रित समाधान "जावा में पायथन कॉलिंग?"

आप अजगर के साथ जावा कोड से अजगर फ़ंक्शन आसानी से कॉल कर सकते हैं। जब तक आपका अजगर कोड स्वयं ही जयंथ के तहत चला जाता है, यानी कुछ सी-एक्सटेंशन का उपयोग नहीं किया जाता है जो समर्थित नहीं हैं।

अगर यह आपके लिए काम करता है, तो यह निश्चित रूप से सबसे आसान उपाय है जिसे आप प्राप्त कर सकते हैं। अन्यथा आप नए org.python.util.PythonInterpreter 6 दुभाषिया समर्थन से org.python.util.PythonInterpreter उपयोग कर सकते हैं।

मेरे सिर के शीर्ष से एक साधारण उदाहरण – लेकिन मुझे आशा है कि काम करना चाहिए: (संक्षिप्तता के लिए कोई त्रुटि जांच नहीं हुई)

 PythonInterpreter interpreter = new PythonInterpreter(); interpreter.exec("import sys\nsys.path.append('pathToModiles if they're not there by default')\nimport yourModule"); // execute a function that takes a string and returns a string PyObject someFunc = interpreter.get("funcName"); PyObject result = someFunc.__call__(new PyString("Test!")); String realResult = (String) result.__tojava__(String.class); 

अरे मैंने सोचा कि मैं इसके जवाब में प्रवेश करेगा हालांकि इसके देर से। मुझे लगता है कि जावा और अजगर के बीच लिंक करने के लिए आप कितनी मजबूत हैं, इस पर पहले विचार करने के लिए कुछ महत्वपूर्ण चीजें हैं

सबसे पहले क्या आप फ़ंक्शन कॉल करना चाहते हैं या क्या आप वास्तव में अजगर कोड को अपने जावा ऑब्जेक्ट में डेटा बदलने के लिए चाहते हैं? यह बहुत महत्वपूर्ण है। अगर आप केवल कुछ अजगर कोड को तर्क के बिना या बिना कॉल करना चाहते हैं, तो यह बहुत मुश्किल नहीं है यदि आपकी तर्क प्राथमिकताएं हैं तो यह इसे और भी आसान बना देता है यद्यपि आप जावा वर्ग को अजगर में सदस्य कार्य कार्यान्वित करना चाहते हैं, जो जावा ऑब्जेक्ट के डेटा को बदलते हैं, तो यह इतना आसान या सीधे आगे नहीं है।

दूसरे हम cpython बात कर रहे हैं या करेंगे jython? मैं कहूँगा cpython जहां पर है! मैं यही सलाह दूंगा कि अजगर इतना कूल है! ऐसे उच्च अवशोषण होने पर सी, सी ++ की आवश्यकता होती है जब जरूरत होती है कल्पना कीजिए कि आप जावा में ऐसा कर सकते हैं। यह सवाल भी पूछने योग्य नहीं है कि क्या ज्योथन ठीक है क्योंकि फिर भी यह आसान है।

इसलिए मैंने निम्नलिखित विधियों के साथ खेला है, और उन्हें आसान से मुश्किल से सूचीबद्ध किया है:

जावा से जीथन

फायदे: आसानी से आसान जावा ऑब्जेक्ट्स के वास्तविक संदर्भ का प्रयोग करें

नुकसान: कोई सीपीथॉन नहीं, बेहद धीमा!

जेथॉन जावा से बहुत आसान है, और अगर यह वास्तव में बहुत अच्छा है तो महान है। हालांकि यह बहुत धीमी है और कोई क्रेपीथोन नहीं है! सफ़लता के बिना जीवन जीने का जीवन है मुझे ऐसा नहीं लगता! आप आसानी से अपने सदस्य कार्यों को जावा ऑब्जेक्ट के लिए अजगर कोड लागू कर सकते हैं।

जावा से जिथन तक सीपीआईथॉन को अग्निद्वार के माध्यम से

अजगर Python के लिए दूरस्थ ऑब्जेक्ट मॉड्यूल है आपके पास एक cpython interpreter पर कुछ ऑब्जेक्ट है, और आप इसे ऑब्जेक्ट भेज सकते हैं जो कि सीरियललाइज़ेशन द्वारा स्थानांतरित किए जाते हैं और यह इस पद्धति के माध्यम से ऑब्जेक्ट भी वापस कर सकते हैं। ध्यान दें कि यदि आप जेथॉन से एक क्रमबद्ध अजगर ऑब्जेक्ट भेजते हैं और उसके बाद कुछ फ़ंक्शन कॉल करते हैं जो इसके सदस्यों में डेटा बदलते हैं, तो आप जावा में उन परिवर्तनों को नहीं देखेंगे। आपको याद रखना जरूरी है कि डेटा को वापस भेजने की आवश्यकता है जिसे आप पायरो से चाहते हैं मेरा मानना ​​है कि यह सबसे आसान तरीका है क्रेपीथोन! आपको किसी भी jni या jna या swig की जरूरत नहीं है या …. आप को किसी भी सी, या सी ++ जानने की जरूरत नहीं है कूल हह?

लाभ: cpython तक पहुंच, निम्न विधियों के रूप में मुश्किल नहीं है

नुकसान: जावा ऑब्जेक्ट के सदस्य डेटा को अजगर से सीधे बदल नहीं सकते हैं। कुछ हद तक अप्रत्यक्ष है, (जियाथन मध्यम आदमी है)।

जावा से सी / सी ++ JNI / JNA / SWIG के माध्यम से एंबेडेड दुभाषिया (शायद बूस्ट पुस्तकालयों का उपयोग कर?) के माध्यम से अजगर

ओएमजी इस पद्धति का हृदय के बेहोश होने के लिए नहीं है। और मैं आपको बता सकता हूं कि यह एक अच्छे तरीके से इसे प्राप्त करने के लिए मुझे बहुत लंबा ले लिया है। मुख्य कारण आप ऐसा करना चाहते हैं ताकि आप cpython कोड चला सकें, जो आपके ऊपर पूर्ण रूप से जावा ऑब्जेक्ट है। अजगर (जो एक घोड़ा की तरह है) के साथ कोशिश करने और रोटी जावा (जो एक चिप्प की तरह है) के निर्णय लेने से पहले विचार करने के लिए प्रमुख प्रमुख चीजें हैं। सबसे पहले यदि आप दुभाषिया दुर्घटनाग्रस्त कर देते हैं जो आप के कार्यक्रम के लिए रोशनी कर रहे हैं! और मुझे संगामिति के मुद्दों पर शुरू नहीं मिला! इसके अलावा, बॉयलर का आबंटित आवंटन है, मेरा मानना ​​है कि मुझे इस बायलर को कम करने के लिए सबसे अच्छा कॉन्फ़िगरेशन मिल गया है, लेकिन फिर भी यह आवंटित है! तो इस बारे में कैसे जाना है: मान लें कि सी + + आपका मध्य आदमी है, आपकी ऑब्जेक्ट वास्तव में सी ++ ऑब्जेक्ट हैं! अच्छा है कि आप जानते हैं कि अब बस अपना ऑब्जेक्ट लिखें जैसे कि सीपीपी नहीं जावा के रूप में आपका प्रोग्राम, जिस डेटा से आप दोनों दुनिया से एक्सेस करना चाहते हैं तो आप जावा के लिए यह सुलभ बनाने के लिए swig ( http://www.swig.org/Doc1.3/Java.html ) के आवरण जनरेटर का उपयोग कर सकते हैं और एक DLL संकलित कर सकते हैं, जिसे आप सिस्टम.लोड (डीएलएल नाम यहाँ) में कहते हैं जावा। पहले यह काम करें, फिर कड़ी मेहनत पर आगे बढ़ें! अजगर पाने के लिए आपको एक दुभाषिया एम्बेड करने की आवश्यकता है सबसे पहले मैं सुझाव देता हूं कि कुछ हैलो इंटरप्रेटर प्रोग्राम्स या सी / सी में इस ट्यूटोरियल एंबेडिंग अजगर एक बार जब आप काम करते हैं, घोड़ा और बंदर नृत्य करने का अपना समय! आप [बढ़ावा] [3] के माध्यम से अजगर को सी + ऑब्जेक्ट भेज सकते हैं। मुझे पता है कि मैंने तुम्हें मछली नहीं दी है, केवल आपको बताया है कि मछली कहाँ से मिलेगी संकलन करते समय कुछ संकेतक इस बात के लिए ध्यान दें।

जब आप को बढ़ावा देने के संकलन को आपको साझा लाइब्रेरी संकलित करने की आवश्यकता होगी। और आपको जेडीके, जे.ए.बी., जेवीएम.लिब, से आवश्यक सामग्री को शामिल और लिंक करने की आवश्यकता है, (आवेदन को लॉन्च करने के दौरान आपको अपने रास्ते में क्लाइंट jvm.dll की भी आवश्यकता होगी) साथ ही साथ पायथन 27.लिब या जो कुछ भी और boost_python-vc100-mt-1_55.lib इसके बाद पायथन शामिल / शामिल हैं, jdk / include, boost और केवल साझा पुस्तकालयों (dlls) का उपयोग अन्यथा बढ़ावा देने के लिए एक teary है और हाँ, मुझे पता है पर पूरा। ऐसे कई तरीके हैं जिनमें यह खट्टा हो सकता है। तो सुनिश्चित करें कि आपको ब्लॉक द्वारा ब्लॉक किए गए प्रत्येक चीज़ को मिलता है फिर उन्हें एक साथ रखो।

यह अजगर कार्यों से तुम्हारा क्या मतलब है पर निर्भर करता है? यदि वे cpython में लिखा गया था, तो आप उन्हें सीधे फोन नहीं कर सकते, आपको जेएनआई का उपयोग करना होगा, लेकिन अगर ये ज्योथन में लिखे गए हैं, तो आप आसानी से उन्हें जावा से कॉल कर सकते हैं, क्योंकि ज्योथन अंततः जावा बाइट कोड बनाता है।

अब जब मैं cpython या jython में लिखा हुआ कहता हूं तो यह ज्यादा समझ नहीं आता है क्योंकि अजगर अजगर है और अधिकांश कोड दोनों कार्यान्वयन पर चलेंगे जब तक आप विशिष्ट पुस्तकालयों का उपयोग नहीं करते जो cpython या java पर निर्भर करता है।

यहां देखें कि जावा में पायथन इंटरप्रिटर कैसे उपयोग करें।

आप जावा नेटिव इंटरफेस का उपयोग करके जावा से किसी भी भाषा को कॉल कर सकते हैं

आपकी आवश्यकताओं के अनुसार, XML-RPC जैसे विकल्प उपयोगी हो सकते हैं, जो प्रोटोकॉल का समर्थन करने वाले किसी भी भाषा में वस्तुतः फ़ंक्शन को कॉल करने के लिए उपयोग किया जा सकता है।

कई जवाबों में यह उल्लेख किया गया है कि आप जेपीआई का उपयोग करने के लिए जेएनआई या जेएनए का उपयोग कर सकते हैं, लेकिन मैं खरोंच से शुरू करने की सलाह नहीं देता क्योंकि जावा से cpython तक पहुंचने के लिए पहले से ही खुले स्रोत पुस्तकालय हैं I उदाहरण के लिए:

  • JEP
  • JPY

जेथॉन में कुछ सीमाएं हैं:

कई मतभेद हैं सबसे पहले, जेथॉन कार्यक्रम सी में लिखित CPython एक्सटेंशन मॉड्यूल का उपयोग नहीं कर सकते। ये मॉड्यूल आमतौर पर एक्सटेंशन के साथ फाइल हैं। इसलिए, .pyd या .dll यदि आप इस तरह के एक मॉड्यूल का उपयोग करना चाहते हैं, तो आपको शुद्ध पायथन या जावा में लिखा समकक्ष के लिए दिखना चाहिए। यद्यपि यह तकनीकी रूप से इस तरह के विस्तारों का समर्थन करने के लिए संभव है- आयरनपैथॉन ऐसा करता है – यैथन में ऐसा करने की कोई योजना नहीं है

Jython के साथ मेरी पायथन स्क्रिप्ट JAR फ़ाइलों को वितरित करना?

आप अजगर स्क्रिप्ट (या बाश या पर्ल स्क्रिप्ट) को जावा से रनटाइम या प्रोसेबिब्लडर का उपयोग करके और आउटपुट को जावा में वापस कर सकते हैं:

जावा में एक बैश खोल स्क्रिप्ट चलाना

जावा में कमांड लाइन चल रहा है

java runtime.getruntime () कमांड लाइन प्रोग्राम निष्पादित करने से आउटपुट प्राप्त कर रहा है

यहां एक लाइब्रेरी है जो आपको एक बार अपनी अजगर स्क्रिप्ट लिखने देता है और रनटाइम पर उपयोग करने के लिए कौन से एकीकरण विधि (जेथॉन, सीपीथोन / पीएपीई जैप और पाइ 4 जे द्वारा) का उपयोग करने का निर्णय लेती है:

https://github.com/subes/invesdwin-context-python

चूंकि प्रत्येक विधि का अपना लाभ / कमियां हैं, जैसा कि लिंक में बताया गया है।

जावा के अंदर अजगर कोड होना चालाक नहीं है फ्लास्क या अन्य वेब ढांचे के साथ अपने अजगर कोड को लपेटें ताकि उसे माइक्रोसेसेज के रूप में बनाया जा सके। अपने जावा प्रोग्राम को इस माइक्रोसेवा को कॉल करने में सक्षम करें (उदा।, आराम से)

मुझे प्रेरित करें, यह बहुत आसान है और आपको कई मुद्दों को बचाएगा I और कोड ढीले युग्मित हैं इसलिए वे स्केलेबल हैं