2012-11-05 26 views
10

मुझे आश्चर्य है कि सी # प्रोजेक्ट पर पाइथन लिपि से एक विशिष्ट विधि को कॉल करने की संभावना है या नहीं।मैं सी # में पाइथन स्क्रिप्ट से एक विशिष्ट विधि कैसे कॉल करूं?

मुझे कोई कोड है ... लेकिन मेरा विचार है:

अजगर कोड:

def SetHostInfos(Host,IP,Password): 
    Work to do... 

def CalcAdd(Numb1,Numb2): 
    Work to do... 

सी # कोड:

SetHostInfos("test","0.0.0.0","PWD") 
result = CalcAdd(12,13) 

मैं कैसे से तरीकों में से एक कॉल कर सकते हैं, यह पायथन लिपि, सी # से अधिक?

+2

आप http पर एक नज़र हुई है: // stackoverflow .com/प्रश्न/7053172/कैसे-कर-i-call-ironpython-code-from-ac-sharp-app? –

+0

मैं एक पाइथन विधि के लिए तर्क पारित करना चाहता हूं और वापसी मूल्य प्राप्त करना चाहता हूं ... यही वह है जो मैं करने की कोशिश कर रहा हूं .. और उनमें से कोई भी मेरी मदद नहीं करता .. – VanDeath

उत्तर

17

आप, IronPython की मेजबानी स्क्रिप्ट को निष्पादित और बनाया दायरे के माध्यम से काम करता है स्क्रिप्ट में परिभाषित पहुँच सकते हैं।

निम्नलिखित नमूना बुनियादी अवधारणा और सी # से फ़ंक्शन का उपयोग करने के दो तरीके दिखाता है।

var pySrc = 
@"def CalcAdd(Numb1, Numb2): 
    return Numb1 + Numb2"; 

// host python and execute script 
var engine = IronPython.Hosting.Python.CreateEngine(); 
var scope = engine.CreateScope(); 
engine.Execute(pySrc, scope); 

// get function and dynamically invoke 
var calcAdd = scope.GetVariable("CalcAdd"); 
var result = calcAdd(34, 8); // returns 42 (Int32) 

// get function with a strongly typed signature 
var calcAddTyped = scope.GetVariable<Func<decimal, decimal, decimal>>("CalcAdd"); 
var resultTyped = calcAddTyped(5, 7); // returns 12m 
1

आप अपने पायथन प्रोग्राम को कमांड लाइन पर तर्क ले सकते हैं और फिर इसे अपने सी # कोड से कमांड लाइन ऐप के रूप में कॉल कर सकते हैं।

हैं कि जाने के लिए रास्ता नहीं है तो संसाधनों के बहुत सारे हैं:

How do I run a Python script from C#? http://blogs.msdn.com/b/charlie/archive/2009/10/25/hosting-ironpython-in-a-c-4-0-program.aspx

1

मुझे ऐसा करने का एक समान तरीका मिला, विधि की कॉल इसके साथ बहुत आसान है।

सी # कोड इस प्रकार है:

IDictionary<string, object> options = new Dictionary<string, object>(); 
options["Arguments"] = new [] {"C:\Program Files (x86)\IronPython 2.7\Lib", "bar"}; 

var ipy = Python.CreateRuntime(options); 
dynamic Python_File = ipy.UseFile("test.py"); 

Python_File.MethodCall("test"); 

तो बुनियादी तौर पर मैं लाइब्रेरी पथ जो मैं अपने अजगर फ़ाइल में परिभाषित करना चाहते हैं के साथ शब्दकोश सबमिट करें।

तो पायथॉन लिपि के रूप में निम्नानुसार है:

#!/usr/bin/python 

import sys 
path = sys.argv[0] #1 argument given is a string for the path 
sys.path.append(path) 
import httplib 
import urllib 
import string 

def MethodCall(OutputString): 
    print Outputstring 

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