locked
Comment rediriger les entrées et sorties standard d’un processus RRS feed

  • Discussion générale

  • Voici un exemple de code :

     

    static void Main(string[] args)
            {
                StreamReader outputReader = null;
                StreamReader errorReader = null;
     
                try 
                {
                    ProcessStartInfo psi = new  ProcessStartInfo(@"c:\Program.exe", "a b c");
     
                    psi.ErrorDialog = false;
                    psi.UseShellExecute = false;
                    psi.RedirectStandardError = true;
                    psi.RedirectStandardInput = true;
                    psi.RedirectStandardOutput = true;
     
                    Process proc = new Process();
                    proc.StartInfo = psi;
                    bool started = proc.Start();
                    if (started)
                    {
                        outputReader = proc.StandardOutput;
                        errorReader = proc.StandardError;
                        proc.WaitForExit();
     
                        string displayText = "Output" + Environment.NewLine;
                        displayText += outputReader.ReadToEnd();
                        displayText += Environment.NewLine + "Error" + Environment.NewLine;
                        displayText += errorReader.ReadToEnd();
     
                        Console.WriteLine(displayText);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                finally
                {
                    if(outputReader != null)
                    {
                        outputReader.Close();
                    }
                    if(errorReader != null)
                    {
                        errorReader.Close();
                    }
                }
            }

     

     

    Supposons que l'application A nécessite que certains arguments soit entrées un par un. Afin de lancer l'application A dans l'application B, nous pouvons rediriger l'entrée standard.

     

    Voici par exemple, le code d'application A:

     

    static void Main(string[] args)
            {
                string input1 = Console.ReadLine();
                string input2 = Console.ReadLine();
     
                Console.WriteLine(input1);
                Console.WriteLine(input2);  
            }

     

    Et voici le code pour l’application B :

    static void Main(string[] args)
            {
                ProcessStartInfo psi = new ProcessStartInfo();
                psi.FileName = @"c:\applicationA.exe";
                psi.UseShellExecute = false;
                psi.RedirectStandardInput = true;
                Process proc = new Process();
                proc.StartInfo = psi;
                proc.Start();
     
                proc.StandardInput.WriteLine(10);
                proc.StandardInput.WriteLine(20);
            }

     

    Voici la documentation MSDN avec exemples pour ProcessStartInfo.RedirectStandardOutput  et ProcessStartInfo.RedirectStandardInput   

     

    Vous pouvez consulter aussi ces articles qui traitent le probleme de redirection des differentes manieres :

    http://www.codeproject.com/KB/cs/ProcessStartDemo.aspx

    http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx

     

    Pour plusieurs questions sur Visual Basic .NET, visitez Foire aux Questions – C# FAQ et Tutoriels

     

     

     

     
    Alex Petrescu - MSFT
    vendredi 26 février 2010 14:41