KeyNotFoundException при вызове IronPython - PullRequest
0 голосов
/ 21 сентября 2011

Мне нужен парсер MediaWiki в C #.(http://www.mediawiki.org/wiki/Alternative_parsers)Поскольку его не существует, и я действительно хочу парсер MediaWiki, а не какой-то другой, например WikiPlex, я искал возможность использовать некоторые из существующих парсеров на другом языке и смог успешно вызвать парсер киви для достижения этой цели.Однако проблема в том, что он не обрабатывает Unicode / UTF-8 правильно.

Теперь я хотел использовать этот скрипт:http://www.connellybarnes.com/code/python/mw2html
и использовать его через IronPython.

Я использую IronPython 2.7 здесь:http://ironpython.net/

Я загрузил двоичный zip-файл (не установщик).

Затем я использовал это руководство в качестве базы:http://www.codeproject.com/KB/cs/IronPythonMethod_CShap.aspx

И вот что я сделал:

using System;
using IronPython.Hosting;


namespace IronPythonMethodInvokationDemo
{


    class Program
    {


        // /6578342/ssylka-na-import-sborok-python-pri-vyzove-iz-ironpython-v-c
        static void Main(string[] args)
        {


            //Microsoft.Scripting.Hosting.ScriptEngine m_engine = Python.CreateEngine(DefaultEngineOptions());
            Microsoft.Scripting.Hosting.ScriptEngine m_engine = Python.CreateEngine();
            System.Collections.Generic.ICollection<string> paths = m_engine.GetSearchPaths();

            paths.Add(@"D:\username\Documents\Visual Studio 2010\Projects\IronPython\IronPython-Bin-2.7\IronPython-2.7\Lib"); // modules path
            paths.Add(@"D:\username\Documents\Visual Studio 2010\Projects\IronPython\IronPython-Bin-2.7\IronPython-2.7"); // ipy.exe path
            m_engine.SetSearchPaths(paths);


            //Step 1: 
            //Creating a new script runtime             
            //var ironPythonRuntime = Python.CreateRuntime();
            var ironPythonRuntime = m_engine.Runtime;

            try
            {
                //Step 2:
                //Load the Iron Python file/script into the memory
                //Should be resolve at runtime
                //dynamic loadIPython = ironPythonRuntime.UseFile("first.py");
                //ironPythonRuntime.GetBuiltinModule();
                dynamic loadIPython = ironPythonRuntime.UseFile("mw3html.py");

                //Step 3:
                //Invoke the method and print the result
                /*
                Console.WriteLine(
                                  string.Format("Addition result from IronPython method for {0} and {1} is {2}", 
                                  100,200, loadIPython.add(100, 200))
                                 );
                */

                Console.WriteLine( string.Format("Result for IronPython main method: {0}", loadIPython.main())  );
            } // End Try
            catch (System.IO.FileNotFoundException ex)
            {
                Console.WriteLine(ex.Message);
            } // End Catch
            Console.ReadKey(true);

        } // End Sub Main


    } // End Class Program


} // End Namespace IronPythonMethodInvokationDemo

Если я использую first.py, то все работает отлично.Теперь, используя mw2html.py, я получаю

KeyNotFoundException для ironPythonRuntime.UseFile ("mw3html.py");для ключа "" ...

Кто-нибудь знает, что это значит?

1 Ответ

0 голосов
/ 22 сентября 2011

Продолжая ваш комментарий: socket.py не существует в IronPython.Вместо этого модуль socket написан на C # и находится в IronPython.Modules.dll.Убедитесь, что на него также ссылается ваш проект, и он находится в том же каталоге, что и IronPython.dll.

...