-
Notifications
You must be signed in to change notification settings - Fork 4
/
PythonInterpreter.cs
32 lines (30 loc) · 1.15 KB
/
PythonInterpreter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Diagnostics;
namespace PythonBinding
{
public class PythonInterpreter
{
private static PyModule mainModule = null;
/// The main Python module. Singleton property, initializes Python environment on first access.
public static PyModule MainModule
{
get
{
if (mainModule == null)
{
CPython.Py_SetProgramName(Process.GetCurrentProcess().MainModule.FileName);
CPython.Py_Initialize();
var exitCode = CPython.PyRun_SimpleString(CPython.StartupScript);
if (exitCode == -1) throw new Exception("PyRun_SimpleString did not execute successfully.");
unsafe
{
var sysModDict = CPython.PyImport_GetModuleDict();
var rawMainModule = CPython.PyMapping_GetItemString(sysModDict, "__main__");
mainModule = new PyModule(rawMainModule);
}
}
return mainModule;
}
}
}
}