Sava Filipovic
Sava Filipovic

Reputation: 7

Execute python 3 code from c# forms application

As a school project my class made a simple programing language in python 3. Now we made a simple ide in c# that should execute python script in a new console window. I was wondering what is most efficient way to do it. (I should execute it with parameters)

Upvotes: 0

Views: 3123

Answers (2)

Dipitak
Dipitak

Reputation: 97

There is two way to run the python script:

  1. One way is to run the python script is by running the python.exe file:
    Run the python.exe file using ProcessStartInfo and pass the python script on it.

private void run_cmd(string cmd, string args) {
ProcessStartInfo start = new ProcessStartInfo();

     start.FileName = "my/full/path/to/python.exe";
     start.Arguments = string.Format("{0} {1}", cmd, args);
     start.UseShellExecute = false;
     start.RedirectStandardOutput = true;
     using(Process process = Process.Start(start))
     {
         using(StreamReader reader = process.StandardOutput)
         {
             string result = reader.ReadToEnd();
             Console.Write(result);
         }
     }  
}
  1. Another way is using IronPython and execute the python script file directly.

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

private static void doPython()
{
    ScriptEngine engine = Python.CreateEngine();
    engine.ExecuteFile(@"test.py");
}

Upvotes: 0

Alex
Alex

Reputation: 21766

You can use ProcessStartInfo

int parameter1 = 10;
int parameter2  = 5
Process p = new Process(); // create process to run the python program
p.StartInfo.FileName = "python.exe"; //Python.exe location
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false; // ensures you can read stdout
p.StartInfo.Arguments = "c:\\src\\yourpythonscript.py "+parameter1 +" "+parameter2; // start the python program with two parameters
p.Start(); // start the process (the python program)
StreamReader s = p.StandardOutput;
String output = s.ReadToEnd();
Console.WriteLine(output);
p.WaitForExit();

Upvotes: 1

Related Questions