在C#中执行python脚本

时间:2015-11-12 10:35:40

标签: c# python-2.7 ironpython

我正在尝试在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,我已经安装了两个而没有解决问题。 我该怎么做才能解决问题?

2 个答案:

答案 0 :(得分:1)

为了执行导入某些库(如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); 

答案 1 :(得分:0)

如果您执行代码,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<string> searchPaths = scriptEngine.GetSearchPaths();
searchPaths.Add("\\Scripts\\Python");
scriptEngine.SetSearchPaths(searchPaths);

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

希望这有帮助。