在C#代码中使用Pyparsing

时间:2013-06-06 13:41:29

标签: c# ironpython pyparsing

我正在尝试在 IronPython 的帮助下执行在 C#中使用 pyparsing 的python脚本。但是当我尝试运行脚本时,我得到的是 ImportException No module named pyparsing。我试图添加一个包含 pyparsing 的目录的路径,但我仍然没有管理如何以正确的方式运行它。

这是 C#代码:

string ExecutePythonScript(string path, string text)
    {
        ScriptEngine engine = Python.CreateEngine();
        ScriptScope scope = engine.CreateScope();

        string dir = System.IO.Path.GetDirectoryName("pyparsing-1.5.7");

        ICollection<string> paths = engine.GetSearchPaths();

        if (!String.IsNullOrEmpty(dir))
        {
            paths.Add(dir);
        }
        else
        {
            paths.Add(Environment.CurrentDirectory);
        }
        engine.SetSearchPaths(paths);

        scope.SetVariable("text", text);
        engine.ExecuteFile(path, scope);

        return scope.GetVariable("result");
    }

当然在python脚本开始时我导入了 pyparsing

1 个答案:

答案 0 :(得分:1)

感谢我的朋友,我发现了什么问题。

  1. 解压后的pyparsing包必须放在名为Lib的文件夹中的C#app的Debug文件夹中。 (我想它也可能在另一个名字的文件夹中,但这对我来说更快。)
  2. 感谢this page我也意识到我需要在C#应用中添加一些代码。
  3. 所以现在是:

        string ExecutePythonScript(string path, string text)
        {
            ScriptEngine engine = Python.CreateEngine();
            ScriptScope scope = engine.CreateScope();
    
            ICollection<string> Paths = engine.GetSearchPaths();
            Paths.Add(".");
            Paths.Add("D:\\DevTools\\IronPython 2.7\\Lib");
            Paths.Add("D:\\DevTools\\IronPython 2.7\\DLLs");
            Paths.Add("D:\\DevTools\\IronPython 2.7");
            Paths.Add("D:\\DevTools\\IronPython 2.7\\lib\\site-packages");
            engine.SetSearchPaths(Paths);
    
            scope.SetVariable("text", text);
            engine.ExecuteFile(path, scope);
            (...)
    

    它至少不会创建异常。