Hello. It seems that the following code works. And it seems that Process 
object can automatically run script by using python.exe, but only if 
standard output is not redirected...

/*
 * Created by SharpDevelop.
 * User: Zlatko
 * Date: 28.5.2006
 * Time: 9:38
 *
 * To change this template use Tools | Options | Coding | Edit Standard 
Headers.
 */
using System;
using System.IO;
using System.Collections.Generic;
using System.Diagnostics;
using System.ComponentModel;
using System.Windows.Forms;

namespace CS_script
{

 class MainClass
 {
  public static void Main(string[] args)
  {
   MyProcess myProcess = new MyProcess();
            myProcess.ExecuteScript();
            MessageBox.Show("Continue?","Application", 
MessageBoxButtons.OKCancel);
  }
 }
 public class MyProcess
    {
        // These are the Win32 error code for file not found or access 
denied.
        const int ERROR_FILE_NOT_FOUND =2;
        const int ERROR_ACCESS_DENIED = 5;

        /// <summary>
        /// Executes a python script.
        /// </summary>
        public void ExecuteScript()
        {
            Process myProcess = new Process();

            try
            {
                // Get the path that stores the python script.
                //string myDocumentsPath 
=Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                //If the script is placed in the same folder as C# 
executable, set the path to current directory:
                string myDocumentsPath=Environment.CurrentDirectory;

                //Set the fully qualified script name
                myProcess.StartInfo.FileName = myDocumentsPath + 
"\\my_script.py";

                //Execute the script:
                myProcess.Start();

               //string output = myProcess.StandardOutput.ReadToEnd();
               //Console.WriteLine(output);

               //Console.WriteLine(myProcess.StandardOutput.ReadToEnd());

               //TextReader t = myProcess.StandardOutput;
               //MessageBox.Show(t.ReadToEnd());

               // Wait for it to die...
               myProcess.WaitForExit();

               MessageBox.Show ("Python script is successfully executed!");

            }
            catch (Win32Exception e)
            {
                if(e.NativeErrorCode == ERROR_FILE_NOT_FOUND)
                {
                    Console.WriteLine(e.Message + ". Check the path.");
                }

                else if (e.NativeErrorCode == ERROR_ACCESS_DENIED)
                {
                    // Note that if your word processor might generate 
exceptions
                    // such as this, which are handled first.
                    Console.WriteLine(e.Message +
                        ". You do not have permission to print this file.");
                }
            }
        }
}
}

Greetings,

Zlatko

"Gerard Flanagan" <[EMAIL PROTECTED]> je napisao u poruci interesnoj 
grupi:[EMAIL PROTECTED]
>> "Gerard Flanagan" <[EMAIL PROTECTED]> je napisao u poruci interesnoj
>> grupi:[EMAIL PROTECTED]
>> > 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)
> 


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to