Como executo um programa de linha de comando em C # e recupero os resultados STD OUT? Especificamente, desejo executar o DIFF em dois arquivos selecionados por meio de programação e gravar os resultados em uma caixa de texto.
c#
command-line
Asa
fonte
fonte
Respostas:
O código é do MSDN .
fonte
{YourProcessObject}.StartInfo.Arguments
string.p.StandardError
fluxo. Quando o fluxo fica cheio, parece que o processo será interrompido até que os dados sejam consumidos; portanto, tenho que ler ambosStandardError
eStandardOutput
para garantir que uma tarefa seja executada corretamente.Aqui está uma amostra rápida:
fonte
Há um outro parâmetro que achei útil, que eu uso para eliminar a janela do processo
isso ajuda a ocultar completamente a janela preta do console do usuário, se é isso que você deseja.
fonte
fonte
process.StartInfo.RedirectStandardError = true;
eif (process.ExitCode == 0)
que resposta aceita não tem.A resposta aceita nesta página tem um ponto fraco problemático em situações raras. Existem dois identificadores de arquivo nos quais os programas gravam por convenção, stdout e stderr. Se você acabou de ler um único identificador de arquivo, como a resposta de Ray, e o programa que você está iniciando grava saída suficiente para o stderr, ele preencherá o buffer e o bloco do stderr de saída. Então seus dois processos estão em um impasse. O tamanho do buffer pode ser 4K. Isso é extremamente raro em programas de curta duração, mas se você tiver um programa de longa duração que gera repetidamente para stderr, isso acontecerá eventualmente. É complicado depurar e rastrear.
Existem algumas boas maneiras de lidar com isso.
Uma maneira é executar o cmd.exe em vez do seu programa e usar o argumento / c para o cmd.exe para invocar o programa junto com o argumento "2> & 1" para o cmd.exe para dizer para mesclar stdout e stderr.
Outra maneira é usar um modelo de programação que leia as duas alças ao mesmo tempo.
fonte
fonte
Você vai precisar usar
ProcessStartInfo
comRedirectStandardOutput
habilitado - então você pode ler o fluxo de saída. Você pode achar mais fácil usar ">" para redirecionar a saída para um arquivo (via sistema operacional) e simplesmente ler o arquivo.[editar: como o que Ray fez: +1]
fonte
RedirectStandardOutput
na verdade.Se você não se importa em introduzir uma dependência, o CliWrap pode simplificar isso para você:
fonte
Esta pode não ser a melhor / mais fácil, mas pode ser uma opção:
Quando você executa a partir do seu código, adicione "> output.txt" e, em seguida, leia o arquivo output.txt.
fonte
Você pode iniciar qualquer programa de linha de comando usando a classe Process e configurar a propriedade StandardOutput da instância Process com um leitor de fluxo criado (com base em uma sequência de caracteres ou em um local de memória). Após a conclusão do processo, você poderá fazer o que for necessário nesse fluxo.
fonte
Isso pode ser útil para alguém se você estiver tentando consultar o cache ARP local em um PC / Servidor.
fonte
Comando de execução de uma linha:
Leia a saída do comando na menor quantidade de código possível:
fonte
Há uma classe ProcessHelper no código-fonte aberto PublicDomain que pode lhe interessar.
fonte
Caso você também precise executar algum comando no cmd.exe, faça o seguinte:
Isso retorna apenas a saída do próprio comando:
Você também pode usar em
StandardInput
vez deStartInfo.Arguments
:O resultado fica assim:
fonte
Apenas por diversão, aqui está minha solução completa para obter a saída PYTHON - com apenas um clique no botão - com o relatório de erros. Basta adicionar um botão chamado "butPython" e um rótulo chamado "llHello" ...
fonte
Como a maioria das respostas aqui não implementa o
using
statemant paraIDisposable
e algumas outras coisas que eu acho que poderiam ser necessárias, adicionarei esta resposta.Para C # 8.0
fonte