[C#]redirection d'entrées/sorties

redirection d'entrées/sorties [C#] - C#/.NET managed - Programmation

Marsh Posté le 27-07-2006 à 17:58:45    

Alors voila le problème:
 
J'ai une appli .NET qui lance un process dont j'aimerais 1-récuperer les sorties dans mon appli  et 2-lui envoyer des entrées depuis mon appli.
Si le process fait des sorties sans demander d'entrée, pas de souci j'y arrive. S'il attend des entrées sans faire de sortie pas de problème non plus. Par contre, s'il mélange les 2, rien ne va plus. S'il fait une sortie puis attend une entrée, je n'arrive pas à capturer la sortie ni à envoyer une entrée.
Quelqu'un aurait une idée pour résoudre ça ?
 
Mon code de test:

Code :
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             System.Diagnostics.Process proc = new System.Diagnostics.Process();
  6.             proc.StartInfo.FileName = "perl.exe";
  7.             proc.StartInfo.Arguments = "test.pl";//"install Crypt-SSLeay/Crypt-SSLeay-0.51.ppd";
  8.             proc.StartInfo.UseShellExecute = false;
  9.             proc.StartInfo.RedirectStandardInput = true;
  10.             proc.StartInfo.RedirectStandardOutput = true;
  11.             proc.StartInfo.RedirectStandardError = true;
  12.             proc.Start();
  13.             System.IO.StreamWriter Writer = proc.StandardInput;
  14.                                    
  15.             String outputText;
  16.             String err;
  17.            
  18.             while (!proc.HasExited)
  19.             {
  20.                 outputText = proc.StandardOutput.ReadLine();
  21.                 err = proc.StandardError.ReadLine();
  22.                 //et pourtant rien ne s'affiche
  23.                 Console.WriteLine(outputText);
  24.                 Console.WriteLine(err);
  25.                 //et l'entrée n'arrive pas au process
  26.                 Writer.WriteLine("yes" );
  27.                 Writer.Flush();
  28.             }
  29.             Writer.Close();
  30.             proc.Close();
  31.             Console.ReadKey();
  32.         }
  33.     }


---------------
©2008 Bleuarff Corp.
Reply

Marsh Posté le 27-07-2006 à 17:58:45   

Reply

Marsh Posté le 27-07-2006 à 22:24:53    

Il te faut multiplexer lecture sur stdout, lecture sur stderr et écriture sur stdin et sans blocage.

Reply

Marsh Posté le 27-07-2006 à 22:42:50    

Euh...jveux bien mais tu pourrais être un poil plus explicite stp ?


---------------
©2008 Bleuarff Corp.
Reply

Marsh Posté le 27-07-2006 à 22:53:28    

ben soit avec des trucs async, soit mais c'est moins bon, avec un thread par lecteur ou écrivain.

Reply

Marsh Posté le 27-07-2006 à 23:05:27    

System.IO.Stream.BeginRead et ses copains.

Reply

Marsh Posté le 27-07-2006 à 23:12:47    

J'avais essayé pour un autre truc et j'en ai pas des bons souvenirs. Il faut obligatoirement passer par des gestionnaires d'evenements nan ?


---------------
©2008 Bleuarff Corp.
Reply

Marsh Posté le 27-07-2006 à 23:28:26    

ben c'est la meilleur solution car infaillible.

Reply

Marsh Posté le 28-07-2006 à 10:28:57    

J'ai justement pas l'impression que ce soit infaillible, il arrive lorsqu'un bete process qui ne fait que des sorties standards qu'elles ne soient pas toutes capturées.


---------------
©2008 Bleuarff Corp.
Reply

Marsh Posté le 28-07-2006 à 23:12:46    

mais bien sur, c'est bien connu, quand je fais  'echo pouet | wc' wc se chie dessus et me renvoit 0, 1 ou 3, ça dépend des fois ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed