Passando pela saída do console do Process.Start diretamente
estou a usarProcess.Start
de um aplicativo de linha de comando .NET para executar outro aplicativo de linha de comando. Não quero capturar a saída do aplicativo, apenas quero que ele vá diretamente para o console.
Com o programa abaixo, a saída parece simplesmente desaparecer no ar. Se eu partirCreateNoWindow
no padrãofalse
então eu recebo a saída em uma nova janela do console, mas quero na janela original do console.UseShellExecute <- false
também é necessário caso contrárioCreateNoWindow
é forçado afalse
.
Eu poderia fazer algo muito mais complicado usandoRedirectStandardOutput
eRedirectStandardError
e depois capturar a saída e reimprimi-la, mas isso é complicado em combinação comWaitForExit
, particularmente como no meu aplicativo real, eu quero usara versão que tem um tempo limite.
Existe alguma maneira de simplesmente obter a saída padrão e o erro transmitido diretamente?
O comportamento que estou vendo é confuso porque a documentação paraRedirectStandardOutput
parece dizer claramente:
Quando um Processo grava texto em seu fluxo padrão, esse texto geralmente é exibido no console.
Aqui está o código de demonstração. Quando eu corro comDummyRunner.exe
Eu obtenho a saída do primeiro bit de código e quando o executo comDummyRunner.exe DummyRunner.exe
Eu não recebo nada. Embora o código esteja em F #, não há nada específico de F # específico sobre esse problema que eu conheça.
module DummyRunner
open System
open System.Diagnostics
[<EntryPoint>]
let main args =
// do something when called with no arguments, just so we can call
// this with itself as an argument to make a self-contained test
if args.Length = 0 then
for n = 1 to 5 do
printfn "Waiting %d" n
System.Threading.Thread.Sleep(1000)
System.Environment.Exit(0)
let cmd = args.[0]
let cmdArgs = args.[1..]
let startInfo = ProcessStartInfo(cmd, String.Join(" ", cmdArgs))
startInfo.UseShellExecute <- false
startInfo.CreateNoWindow <- true
let p = Process.Start(startInfo)
p.WaitForExit()
p.ExitCode