[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