3

I am Integrating Python script to .Net and I am using IronPython package that's available for .Net developers in Visual Studio. My Python code contains packages like face_recognition, glob, opencv. I am getting an error when I'am running this python script although the simple Python is running in PyCharm. Can anyone know what I am doing wrong? Please give me the answer that I should do.

These packages I am using and later I am using it by calling them:

import face_recognition
import cv2
import glob

video_capture = cv2.VideoCapture(0)

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

And this is my Code which is in Visual Studio: (Making a Console App)

            var py = Python.CreateEngine();

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

And the error I am getting by the Visual Studio is:

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

The program '[23408] PythonDotNet.exe' has exited with code 0 (0x0).
M A K
  • 432
  • 2
  • 5
  • 18
  • are you using the same Python version for both the native (CPython) and IronPython interpreters? There are many differences between v2 and v3. – Alexander Pope Nov 10 '18 at 16:17
  • No, IronPython latest version is 2.7.9 and CPython is 3.6.6. – M A K Nov 19 '18 at 12:23
  • Then you found the problem, IronPython 3 is not ready for production, see https://github.com/IronLanguages/ironpython3 – Alexander Pope Nov 19 '18 at 22:27
  • Instead of using IronPython you can execute the Python script in a command line and parse the output, see if this helps: https://stackoverflow.com/questions/206323/how-to-execute-command-line-in-c-get-std-out-results?noredirect=1&lq=1 – Alexander Pope Nov 19 '18 at 22:34
  • @AlexanderPope Thanks man your suggested link has my answer. I am answering to my question below. – M A K Nov 20 '18 at 08:17

2 Answers2

3

IronPython 3 is not ready for production so Instead of using IronPython you can execute the Python script in a command line and parse the output:

  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);
          }
      }
  }
M A K
  • 432
  • 2
  • 5
  • 18
2

You are getting an error because that function is not what you want.

Create a new Console App Project called RunPython.csproj. In the main sub, write:

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

After that, you can build your project to generate an ".exe" file. In Console or a shell, write:

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

You can visit this site for more examples.

rishat
  • 8,206
  • 4
  • 44
  • 69
David Hurtado
  • 324
  • 2
  • 10
  • No it is not working man. It throwing an error and showing build failed in the Error List. – M A K Nov 19 '18 at 12:19