Как я могу запустить сценарий Python из моей службы do tnet core windows? - PullRequest
0 голосов
/ 08 мая 2020

Немного предыстории,

  • У меня есть do tnet windows сервис , которому нужны данные из Python скрипта (main. py)

  • main.py , который использует несколько модулей, включая numpy, scipy и другие сторонние модули, отвечает за выполнение некоторых вычислений logi c которые в настоящее время невозможно сделать в C#

  • main.py принимает несколько параметров и возвращает некоторые результаты, которые затем используются нашим do tnet windows сервис .

  • Я использую Python v3.8

Теперь я пытаюсь придумать решение, чтобы и сервис tnet windows, и скрипт python работали вместе. Есть предложения использовать Iron Python, но я считаю, что у него есть ограничение на импорт сторонних модулей, которые могут не работать в этом сценарии.

Я думал об использовании этого main .py как микросервис ie успокаивающий API, использующий Flask, вероятно, делая это, моя do tnet windows служба может делать запросы всякий раз, когда это необходимо сценарий python для выполнения вычислений, и он масштабируемый, когда дело доходит до использования в другом месте

В противном случае, пожалуйста, посоветуйте, если вы считаете, что это можно сделать по-другому

Я буду рад предложения, рекомендации или вопросы.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Утюг python совместим с Python 2.7. До поддержки Python3 еще далеко. Если вы используете numpy и scipy, я бы определенно использовал go маршрут микросервиса, чтобы вы могли использовать текущие поддерживаемые версии.

Итак, теперь, когда ваш C# вызывает REST API, службу python нужно запускать на Windows? Можете ли вы запустить систему linux или Windows с помощью WSL?

0 голосов
/ 08 мая 2020

Добавьте что-то вроде этого метода:

     public class YourClass
        {
            public string Run(string cmd, string args)
            {
                ProcessStartInfo start = new ProcessStartInfo();
                start.FileName = "python";
                start.Arguments = string.Format("\"{0}\" \"{1}\"", cmd, args);
                start.UseShellExecute = false;// Do not use OS shell
                start.CreateNoWindow = true; // We don't need new window
                start.RedirectStandardOutput = true;// Any output, generated by application will be redirected back
                start.RedirectStandardError = true; // Any error in standard output will be redirected back (for example exceptions)
                using (Process process = Process.Start(start))
                {
                    using (StreamReader reader = process.StandardOutput)
                    {
                        string stderr = process.StandardError.ReadToEnd(); // Here are the exceptions from our Python script
                        string result = reader.ReadToEnd(); // Here is the result of StdOut(for example: print "test")
                        return result;
                    }
                }
            }

}

И затем вызовите туда свой python файл, как показано ниже:

var res = new YourClass().Run("your_python_file.py","params");
 Console.WriteLine(res);
...