2012-11-05 24 views
10

Tôi tự hỏi nếu có khả năng gọi một phương thức cụ thể từ một kịch bản Python trên một dự án C#.Làm cách nào để gọi một Phương thức cụ thể từ một Tập lệnh Python trong C#?

Tôi không có mã ... nhưng ý tưởng của tôi là:

Python Mã số:

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

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

C# Code:

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

Làm thế nào tôi có thể gọi một trong những phương pháp, từ kịch bản Python này, trên C#?

+2

Bạn đã xem http: // stackoverflow .com/questions/7053172/how-can-i-call-ironpython-code-từ-ac-sharp-app? –

+0

Tôi muốn chuyển đối số sang phương thức Python và nhận giá trị trả về ... Đó là những gì tôi đang cố gắng thực hiện .. và không có thứ nào trong số đó giúp ích cho tôi .. – VanDeath

Trả lời

17

Bạn có thể lưu trữ IronPython, thực thi kịch bản và truy cập vào các chức năng được xác định trong kịch bản thông qua phạm vi tạo ra.

Mẫu sau đây cho thấy khái niệm cơ bản và hai cách sử dụng hàm từ C#.

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

Tôi đã tìm được cách tương tự để thực hiện, cuộc gọi của phương thức dễ dàng hơn nhiều với nó.

C# Mã diễn ra như sau:

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"); 

Vì vậy, về cơ bản tôi gửi từ điển với đường dẫn thư viện mà tôi muốn xác định trong tập tin python của tôi.

Vì vậy, Python Script trông như sau:

#!/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 

Vì vậy, Cuộc gọi phương pháp tại là dễ dàng hơn nhiều từ C# Và việc thông qua tranh luận vẫn như cũ. Ngoài ra với mã này, bạn có thể nhận được thư mục thư viện tùy chỉnh cho tệp Python rất tốt nếu bạn làm việc trong một mạng với nhiều PC khác nhau

Các vấn đề liên quan