在c#代码中使用Pyparsing

本文关键字:Pyparsing 代码 | 更新日期: 2023-09-27 18:17:18

我试图执行python脚本使用pyparsing c# 的帮助下IronPython。但是当我尝试运行脚本时,我得到了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

在c#代码中使用Pyparsing

多亏了我的朋友,我才找到了问题所在。

  1. 解压的pyparsing包必须放在c# app的Debug文件夹下的Lib文件夹中。(我想它也可以在另一个名称的文件夹,但这对我来说更快。)
  2. 多亏了这个页面,我也意识到我需要在c#应用程序中添加一些代码行。

所以现在是:

    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);
        (...)

它至少没有创建异常