Каковы лучшие практики использования Python в приложении C #? - PullRequest
0 голосов
/ 04 января 2019

У меня есть требование для использования аналитики Python в приложении c #.

Если быть точным: c # должен вызвать скрипт Python и получить результат обратно в приложение c # для дальнейшей обработки.

Iпытался использовать IronPython, как рекомендуют многие.

ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.ExecuteFile(@"DemoPythonApplication\SentimentAnalysis.py", scope);

dynamic testFunction = scope.GetVariable("create_sentiment_analysis"); //calling a function from python script file
var result = testFunction(); //This function is returning a dynamic dictionary, which I can use in my c# code further

Но ограничение IronPython заключается в том, что он не обеспечивает поддержку многих библиотек python, таких как pandas, numpy, nltk и т. Д. Эти библиотеки используются в сценариях python.(поскольку у нас есть другая команда, работающая над Python, я не могу контролировать их использование определенных библиотек.)

Другой вариант, который я попробовал, - запустить процесс Python и вызвать скрипт

private static readonly string PythonLocation = @"Programs\Python\Python37\python.exe"; //Location of Python.exe
private static readonly string PythonScript = @"DemoPythonApplication\SentimentAnalysis.py"; //Location of Python Script

private static void ProcessInPython(int a, int b)
    {
        ProcessStartInfo start = new ProcessStartInfo();
        start.FileName = PythonLocation;
        start.Arguments = string.Format("{0} {1} {2}", PythonScript, a, b);
        start.UseShellExecute = false;
        start.RedirectStandardOutput = true;

        using (Process process = Process.Start(start))
        {
            using (StreamReader reader = process.StandardOutput)
            {
                var result = reader.ReadToEnd();
                Console.Write(result);
            }
        }
    }

Существуют ограничения использования этого подхода, хотя я могу получить только то, что печатается на консоли как string, и не могу получить вывод, возвращаемый функциями python.

Также, если я использую второй подход, я не знаю, как вызвать конкретную функцию из файла скрипта python.

Может кто-нибудь помочь с лучшими практиками использования python в c # длятакая ситуация?

...