이번에 예정인 프로젝트가 C#을 사용할 것이기 때문에 C#과 python을 어떻게 연동할지 찾아 보았습니다.
가장 눈에 띄는게 IronPython이었는데요, 인터넷상의 대부분의 문서들이 .NET 4.0에서 환경에서 연동하는 것을 설명하였습니다.
이렇게 할려면 VS2010이 있어야 하는것 같았구요.
저의 환경은 VS2008이고 시스템에 설치되어 있는 것도 .NET2.X 였습니다.
그래서 IronPython을 포기하고 Python.NET을 검토해 보았는데 의외로 쉽게 연동할수가 있었습니다.
일단은 Python.NET을 다운 받구요.
C# 프로젝트에서 다운 받은 DLL을 레퍼런스 시키면 바로 시작할 수 있습니다.
아래는 동료 연진이가 테스트한 코드입니다.
파이썬 코드 : Hello.py
가장 눈에 띄는게 IronPython이었는데요, 인터넷상의 대부분의 문서들이 .NET 4.0에서 환경에서 연동하는 것을 설명하였습니다.
이렇게 할려면 VS2010이 있어야 하는것 같았구요.
저의 환경은 VS2008이고 시스템에 설치되어 있는 것도 .NET2.X 였습니다.
그래서 IronPython을 포기하고 Python.NET을 검토해 보았는데 의외로 쉽게 연동할수가 있었습니다.
일단은 Python.NET을 다운 받구요.
C# 프로젝트에서 다운 받은 DLL을 레퍼런스 시키면 바로 시작할 수 있습니다.
아래는 동료 연진이가 테스트한 코드입니다.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using Python.Runtime;
6 using System.Windows.Forms;
7 namespace Python_Test
8 {
9 class Program
10 {
11 static void Main(string[] args)
12 {
13
14 int index = Application.ExecutablePath.LastIndexOf("\\");
15 string AppPath = Application.ExecutablePath.Substring(0, index);
16
17 PythonEngine.Initialize();
18
19 //! 파이썬 파일이 들어 있는 폴더를 path에 추가
20 PyObject sys = PythonEngine.ImportModule("sys");
21 PyObject path = sys.GetAttr("path");
22 PyObject append = path.GetAttr("append");
23 PyObject[] a = new PyObject[1];
24 a[0] = new PyString(AppPath + "\\python");
25 append.Invoke(a);
26
27
28 PyObject helloModule = PythonEngine.ImportModule("Hello");
29
30 if (null != helloModule)
31 {
32 //! 인자를 두개 만듦
33 PyObject[] param = new PyObject[2];
34 param[0] = new PyString("python.NET");
35 param[1] = new PyString("aaa");
36
37 string fromPython = helloModule.InvokeMethod("hello", param).ToString();
38 Console.WriteLine(fromPython);
39
40 Console.ReadKey();
41 }
42
43 PythonEngine.Shutdown();
44 }
45 }
46 }
1 def hello(argv , argv1):
2 return 'python say : ' + argv + argv1
예전에 사용한 MFC+python 조합보다 좀더 간편하게 사용할수 있겠다라는 인상을 받았습니다.
댓글
댓글 쓰기