Как я могу интегрировать Python версии 3 с .Net - PullRequest
0 голосов
/ 10 ноября 2018

Я интегрирую скрипт Python в .Net и использую пакет IronPython, который доступен для разработчиков .Net в Visual Studio. Мой код Python содержит пакеты, такие как face_recognition, glob, opencv. Я получаю сообщение об ошибке, когда запускаю этот скрипт на Python, хотя простой Python работает в PyCharm. Может кто-нибудь знает, что я делаю не так? Пожалуйста, дайте мне ответ, который я должен сделать.

Эти пакеты я использую и позже использую, вызывая их:

import face_recognition
import cv2
import glob

video_capture = cv2.VideoCapture(0)

all_images = glob.glob('images/*.jpg')

А это мой код в Visual Studio: (Создание консольного приложения)

            var py = Python.CreateEngine();

            py.ExecuteFile("C:\\Users\\Hp\\PycharmProjects\\final_face\\example.py");
            Console.ReadLine();

И ошибка, которую я получаю в Visual Studio:

Exception thrown: 'Microsoft.Scripting.SyntaxErrorException' in Microsoft.Scripting.dll

The program '[23408] PythonDotNet.exe' has exited with code 0 (0x0).

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

IronPython 3 не готов к работе, поэтому вместо использования IronPython вы можете выполнить скрипт Python в командной строке и проанализировать вывод:

  class Program
      {
          static void Main(string[] args)
          {
              Program p = new Program();
              p.butPython();
          }

      public void butPython()
      {
          var hello = "Calling Python...";

          Tuple<String, String> python = GoPython(@"C:\Users\HP\PycharmProjects\final_face\final.py");
          hello = python.Item1; // Show result.
          Console.WriteLine(hello);
          Console.ReadLine();
      }

      public Tuple<String, String> GoPython(string pythonFile, string moreArgs = "")
      {
          ProcessStartInfo PSI = new ProcessStartInfo();
          PSI.FileName = "py.exe";
          PSI.Arguments = string.Format("\"{0}\" {1}", pythonFile, moreArgs);
          PSI.CreateNoWindow = true;
          PSI.UseShellExecute = false;
          PSI.RedirectStandardError = true;
          PSI.RedirectStandardOutput = true;
          using (Process process = Process.Start(PSI))
          using (StreamReader reader = process.StandardOutput)
          {
              string stderr = process.StandardError.ReadToEnd(); // Error(s)!!
              string result = reader.ReadToEnd(); // What we want.
              return new Tuple<String, String>(result, stderr);
          }
      }
  }
0 голосов
/ 10 ноября 2018

Вы получаете ошибку, потому что эта функция не то, что вы хотите.

Создайте новый проект консольного приложения с именем RunPython.csproj. В основной сабе напишите:

static void Main(string[] args)
{
    var py = Python.CreateRuntime();
    py.ExecuteFile();
}

После этого вы можете создать свой проект для генерации файла .exe. В консоли или оболочке напишите:

RunPython.exe "C:\Users\Hp\PycharmProjects\final_face\example.py"

Вы можете посетить этот сайт для большего количества примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...