[Mono-devel-list] System.Diagnostics.Process redirection

Colin JN Breame colin at breame.net
Tue Jul 5 06:00:55 EDT 2005


On Monday 04 Jul 2005 17:05, John Bailo wrote:
> Colin JN Breame wrote:
> >On Sunday 03 Jul 2005 16:45, John Bailo wrote:
> >>1. Have you tried adding a catch so you can see any errors that might be
> >>thrown?   You have that code nested in a try -- but no cache.
> >
> >Yes I have - I've tried both a catch and a finally block around the
> > suspect line.  It really is exiting at that point.
> >
> >>2. Have you stepped it through monodevelop?
> >
> >I don't have monodevelop installed.  I would be grateful if someone else
> > could try the program to see if they get the same result.
>
> I tried it and got the exact same result

Thanks - glad to know it's not just me!  I'll register a bug.

>
> >>3. I know from Windows .NET that the methods for monitoring the state,
> >> and completion of a Process is somewhat ill-defined.   Yes, there are
> >> several sample code examples but some say different things.   For a
> >> project I did that send an lpr command, I ended up doing two things.
> >>
> >>Set a new Process equal to the actual process and monitor that as a kind
> >> of "handle".   Two, put in a Thread.Sleep to give  process a chance to
> >> "clean up".   There seems to be some long disconnect between when the
> >> process 'stops' and when it 'really stops'.
> >>
> >>At least that has been my experience w/Windows.NET
> >>
> >>>.
> >>>
> >>>Any ideas what might be going on here?  Could this be SIGPIPE related?
> >>>
> >>> -- Colin
> >>>
> >>>ps. mono 1.1.8.1
> >>>
> >>>
> >>>
> >>>using System;
> >>>using System.IO;
> >>>using System.Diagnostics;
> >>>
> >>>public class main_t {
> >>>
> >>>        public static void Main() {
> >>>                while (true) {
> >>>                        run();
> >>>                }
> >>>        }
> >>>
> >>>        public static void run() {
> >>>                Process p = null;
> >>>
> >>>                try {
> >>>                        p = new Process();
> >>>
> >>>                        string pipe = "echo hello";
> >>>
> >>>                        int i = pipe.IndexOf(' ');
> >>>                        if (i == -1) {
> >>>                                p.StartInfo.FileName = pipe;
> >>>                        } else {
> >>>                                p.StartInfo.FileName = pipe.Substring(0,
> >>>i); p.StartInfo.Arguments = pipe.Substring(i+1, pipe.Length-i-1);
> >>>                        }
> >>>
> >>>                        p.StartInfo.UseShellExecute = false;
> >>>                        p.StartInfo.RedirectStandardInput = true;
> >>>                        try {
> >>>                                p.Start();
> >>>                        } catch (Exception e) {
> >>>                                Console.Error.WriteLine("could not
> >>>execute: {0}", pipe);
> >>>                                goto init_error;
> >>>                        }
> >>>
> >>>                        TextWriter stdout = Console.Out;
> >>>                        Console.SetOut(p.StandardInput);
> >>>                        stdout.WriteLine("1");
> >>>                        p.StandardInput.WriteLine("hello world!");
> >>>                        stdout.WriteLine("2");
> >>>                        Console.SetOut(stdout);
> >>>
> >>>                        p.StandardInput.Close();
> >>>
> >>>                        if (p != null) {
> >>>                                p.WaitForExit();
> >>>                        }
> >>>
> >>>                } finally {
> >>>                        if (p != null) p.Close();
> >>>                }
> >>>        init_error:;
> >>>        }
> >>>}
> >>>_______________________________________________
> >>>Mono-devel-list mailing list
> >>>Mono-devel-list at lists.ximian.com
> >>>http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >>
> >>_______________________________________________
> >>Mono-devel-list mailing list
> >>Mono-devel-list at lists.ximian.com
> >>http://lists.ximian.com/mailman/listinfo/mono-devel-list



More information about the Mono-devel-list mailing list