[Mono-devel-list] System.Diagnostics.Process redirection
John Bailo
jabailo at texeme.com
Mon Jul 4 12:05:26 EDT 2005
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
>
>
>>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