在C#中执行python脚本

我试图在C#中执行python代码。 通常应该使用IronPython并在安装PTVS之后完成(我使用的是VS 2010)。

var pyEngine = Python.CreateEngine(); var pyScope = pyEngine.CreateScope(); try { pyEngine.ExecuteFile("plot.py", pyScope); } catch (Exception ex) { Console.WriteLine("There is a problem in your Python code: " + ex.Message); } 

问题是IronPython似乎无法识别像numpy,pylab或matplotlib这样的库。 我看了一下,发现有人在谈论Enthought Canopy或Anaconda,我已经安装了两个而没有解决问题。 我该怎么做才能解决问题?

为了执行导入一些库(如numpy和pylab)的Python脚本,可以这样做:

  string arg = string.Format(@"C:\Users\ayed\Desktop\IronPythonExamples\RunExternalScript\plot.py"); // Path to the Python code Process p = new Process(); p.StartInfo = new ProcessStartInfo(@"D:\WinPython\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\python.exe", arg); p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; // Hide the command line window p.StartInfo.RedirectStandardOutput = false; p.StartInfo.RedirectStandardError = false; Process processChild = Process.Start(p.StartInfo); 

如果您执行代码,IronPython将只查找当前工作目录中的脚本。 您需要添加更多搜索路径。 这是我使用ironpython的应用程序中的一些旧集成代码的一部分:

 var runtimeSetup = Python.CreateRuntimeSetup(null); runtimeSetup.DebugMode = false; runtimeSetup.Options["Frames"] = true; runtimeSetup.Options["FullFrames"] = true; var runtime = new ScriptRuntime(runtimeSetup); var scriptEngine = runtime.GetEngineByTypeName(typeof(PythonContext).AssemblyQualifiedName); // Set default search paths ICollection searchPaths = scriptEngine.GetSearchPaths(); searchPaths.Add("\\Scripts\\Python"); scriptEngine.SetSearchPaths(searchPaths); 

诀窍是在此代码行中添加所有路径: scriptEngine.SetSearchPaths(searchPaths); 。 如果你在这里添加包含plot.py的目录, plot.py一切都应该可行。

希望这可以帮助。