starting some Python script from C#

Gerard Flanagan grflanagan at yahoo.co.uk
Sun May 28 07:19:54 EDT 2006


> "Gerard Flanagan" <grflanagan at yahoo.co.uk> je napisao u poruci interesnoj
> grupi:1148728940.440692.166330 at i39g2000cwa.googlegroups.com...
> > tatamata wrote:
> >> Hello.
> >>
> >> How can I run some Python script within C# program?
> >>
> >
> > ---------------------------------------------------------------------------------
> >            ProcessStartInfo startInfo;
> >            Process process;
> >            string directory;
> >            string pyArgs;
> >            string script;
> >
> >            startInfo = new ProcessStartInfo("python");
> >            startInfo.WorkingDirectory = directory;
> >            startInfo.Arguments = script + " " + pyArgs;
> >            startInfo.UseShellExecute = false;
> >            startInfo.CreateNoWindow = true;
> >            startInfo.RedirectStandardOutput = true;
> >            startInfo.RedirectStandardError = true;
> >
> >            process = new Process();
> >            process.StartInfo = startInfo;
> >            process.Start();
> >
> >            string s;
> >            while ((s = process.StandardOutput.ReadLine()) != null)
> >            {
> >                //do something with s
> >            }
> > ---------------------------------------------------------------------------------
> >

tatamata wrote:
> Hello. I tried to implement ypour suggestion, but an error apears:
> "Exception System.ComponentModel.Win32Exception was thrown in debugee:
> The specified executable is not a valid Win32 application.
>
> namespace CS_script
> {
>  class MainClass
>  {
>   public static void Main(string[] args)
>   {
>
>     System.Diagnostics.ProcessStartInfo psi =new
> System.Diagnostics.ProcessStartInfo();
>     psi.FileName="my_script.py";
>     psi.WorkingDirectory=Environment.CurrentDirectory;
>     psi.RedirectStandardOutput = true;
>     psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
>     psi.UseShellExecute = false;
>     psi.CreateNoWindow = true;
>
>     System.Diagnostics.Process script;
>     script = System.Diagnostics.Process.Start(psi);
>
>     System.IO.StreamReader myOutput = script.StandardOutput;
>     script.WaitForExit(2000);
>     if (script.HasExited)
>      {
>      string output = myOutput.ReadToEnd();
>      //this.processResults.Text = output;
>     }
>     MessageBox.Show("finished!");
>   }
>  }
> }
>
> When running the program, I have the following error:
>
> "Exception System.ComponentModel.Win32Exception was thrown in debugee:
> The specified executable is not a valid Win32 application.
>
> StartWithCreateProcess()
> Start()
> Start()
> Main() - c:\Documents and Settings\Zlatko\My Documents\SharpDevelop
> Projects\CS_script\CS_script\Main.cs:32,5  "
>


I have no means of running C# programs at present and can't claim much
expertise in any case.  A guess is that a "valid Win32 application"
means an '.exe' file, not a '.py' file.

You are assuming that a Process object is as smart as the command
interpreter ('cmd.exe') and will know to use 'python.exe' for a file
with a 'py' extension?

What happens if you use 'python.exe' (or 'cmd.exe') as your file and
the script name as argument as in the code I posted?

Gerard


(PS. This group prefers that one doesn't top-post)




More information about the Python-list mailing list