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:
app1 inicia app2 como um processo filho usando a class Process
(veja os links acima).
app1 grava na input padrão do .StandardInput
escrevendo para o stream .StandardInput
do object Process
associado ao app2 .
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