2009-05-10 59 views

Trả lời

1

Bạn có thể xem số post này.

8

Có, bằng cách lưu trữ IronPython.

6

Trong phiên bản hiện tại được phát hành của C#, không có cách nào tuyệt vời để đạt được điều này mà không cần sử dụng một số loại lớp cầu. Bạn có thể lưu trữ nó IronPython đến một mức độ nhưng khó có thể tận dụng các tính năng động của IronPython vì C# là một ngôn ngữ được đánh máy rất tĩnh

Nếu bạn đang nói về IronPython, C# 4.0 sẽ có thể tương tác với điều đó không có vẻ. C# 4.0 đang giới thiệu tính năng calldh mới cho phép nó hoạt động với bất kỳ ngôn ngữ nào đang chạy trên DLR.

dynamic d = GetSomePythonObject(); 
d.SomeMethod(); 
5

Tôi biết 3 cách:

1) Sử dụng Iron Python và các dự án Python của bạn có thể tương tác tự do với các dự án được viết bằng C#.

2) Hiển thị hàm Python của bạn với COM. Bạn sẽ làm điều này nếu bạn cần sử dụng các thư viện Python mà bạn không muốn hoặc không thể chuyển đổi sang Iron Python (EG, nếu bạn chỉ có một DLL.) "COM mess" không thực sự quá tệ, nếu mã Python và mã C# của bạn đang chạy trên cùng một máy. Mã này từ this tutorial cho thấy rằng nó không phải là quá xấu xí:

class PythonUtilities: 
    _public_methods_ = [ 'SplitString' ] 
    _reg_progid_ = "PythonDemos.Utilities" 
    # NEVER copy the following ID 
    # Use "print pythoncom.CreateGuid()" to make a new one. 
    _reg_clsid_ = "{41E24E95-D45A-11D2-852C-204C4F4F5020}" 

    def SplitString(self, val, item=None): 
    import string 
    if item != None: item = str(item) 
    return string.split(str(val), item) 

# Add code so that when this script is run by 
# Python.exe, it self-registers. 
if __name__=='__main__': 
    print "Registering COM server..." 
    import win32com.server.register 
    win32com.server.register.UseCommandLine(PythonUtilities) 

3) Có C# và Python giao tiếp thông qua ổ cắm. Bạn sẽ làm điều này nếu bạn có mã bạn không thể chuyển đổi sang Iron Python và bạn cần truy cập nó từ xa. Điều này đòi hỏi công việc nhiều nhất bởi vì bạn cần marshall và unmarshall các đối số và trả về giá trị từ byte hoặc chuỗi, nhưng đó là những gì một nhóm của tôi đã làm khi chúng tôi cần để làm cho C# nói chuyện với một quá trình Python từ xa.

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