Como escrever para o stdin de outro aplicativo?

Eu tenho um módulo que lê o erro StandardError de um processo. Tudo funciona bem, mas quero fazer algo diferente. Eu não sei como redirect stdin como o caminho nativo:

app1.exe -someargs | app2.exe -someargs

Onde app2 lê todo o stdout de app1 em seu stdin.

Dê uma olhada na documentação de referência do MSDN para o seguinte (ambos a serem encontrados no namespace System.Diagnostics ):

  • Process.StandardInput

  • ProcessStartInfo.RedirectStandardInput .
    Há um exemplo mostrando como iniciar um processo filho e escrever diretamente em sua input padrão.

Para o seu exemplo específico, veja como você configura as coisas:

  1. app1 inicia app2 como um processo filho usando a class Process (veja os links acima).

  2. app1 grava na input padrão do .StandardInput escrevendo para o stream .StandardInput do object Process associado ao app2 .

  3. app2 apenas lê linhas de sua input padrão (por exemplo, via Console.ReadLine() ).

Depois de ter o object Process representando o processo com o qual você deseja se comunicar (seja porque você o obteve do SO usando o método estático Process.GetProcesses ou porque você o criou sozinho), é possível append um StreamWriter à propriedade Process.StandardInput e use isso para escrever no stdin do processo. Não se esqueça de definir ProcessStartInfo.RedirectStandardInput no seu processo recém-criado como true .

Em uma nota relacionada, você pode usar um StreamReader no Process.StandardOutput para ler a saída (como a leitura do StandardError ).

Eu tive que usar BinaryWriter, este artigo explica tudo: BinaryWriter e StdIn