Zaya
Zaya

Reputation: 336

process.Start() not working in C# to call python script

Sorry if this is something obvious, I'm super new to C#. I'm working on a program that runs a python script to check something online, that then writes it back to a file that C# reads and puts on a form. Everything works if I manually run them both at the same time, but I really want to start the script from the C# program.

Here's the function that should start the python script:

private void RunPython()
{
        Process p = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = "python " + path + "\\foo.py";
        p.StartInfo = startInfo;
        p.Start();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
        // get things set up... etc.
        RunPython();
}

I've tried running it without the window hidden, and it just brings up an empty cmd line in the 'path' directory. Is it never running the python script? It doesn't seem like it is, but it may also be running it and immediately closing it. I can't tell.

I need it to stay open for the duration of the C# program's run, so if the problem is it exiting when the RunPython() method returns, is there some different way I could go about this?

Thanks!!

Upvotes: 2

Views: 5253

Answers (1)

Evan Frisch
Evan Frisch

Reputation: 1374

If you want to run a program in the command line using arguments to cmd.exe you need the /c flag. Alternatively you can use /k but that keeps the command process running which you probably don't want.

/c Carries out the command specified by String and then stops.

So it's usage is cmd.exe /c [string]

Try changing your arguments line to:

startInfo.Arguments = "/c \"python " + path + "\\foo.py\"";

See here for more information about running cmd.exe and dealing with quotes in the string section of the command: https://technet.microsoft.com/en-us/library/cc771320(v=ws.11).aspx

Upvotes: 1

Related Questions