Gostaria de executar um programa de linha de comando externo no meu aplicativo Mono / .NET. Por exemplo, eu gostaria de executar o mencoder . É possível:
- Para obter a saída do shell da linha de comando e escrevê-la na minha caixa de texto?
- Para obter o valor numérico para mostrar uma barra de progresso com o tempo decorrido?
c#
.net
mono
process.start
firme
fonte
fonte
Você pode processar sua saída de forma síncrona ou assíncrona .
1. Exemplo síncrono
Observe que é melhor processar a saída e os erros : eles devem ser tratados separadamente.
(*) Para alguns comandos (aqui
StartInfo.Arguments
), você deve adicionar a/c
diretiva , caso contrário, o processo congela noWaitForExit()
.2. Exemplo assíncrono
Se você não precisar realizar operações complicadas com a saída, poderá ignorar o método OutputHandler, apenas adicionando os manipuladores diretamente na linha:
fonte
Tudo bem, para quem deseja ler erros e saídas, mas obtém impasses com qualquer uma das soluções, fornecidas em outras respostas (como eu), aqui está uma solução que eu criei após ler a explicação do MSDN para a
StandardOutput
propriedade.A resposta é baseada no código do T30:
fonte
A maneira padrão do .NET de fazer isso é ler o fluxo StandardOutput do processo . Há um exemplo nos documentos vinculados do MSDN. Similar, você pode ler do StandardError e gravar no StandardInput .
fonte
É possível obter a saída do shell da linha de comandos de um processo, conforme descrito aqui: http://www.c-sharpcorner.com/UploadFile/edwinlima/SystemDiagnosticProcess12052005035444AM/SystemDiagnosticProcess.aspx
Isso depende do mencoder. Se ele emitir esse status na linha de comando, então sim :)
fonte
você pode usar memória compartilhada para os 2 processos para se comunicar, confira
MemoryMappedFile
você criará principalmente um arquivo mapeado de memória
mmf
no processo pai usando a instrução "using" e depois criará o segundo processo até que termine e deixe gravar o resultado nommf
usoBinaryWriter
, depois ler o resultadommf
no processo pai usando, você também pode passe ommf
nome usando argumentos de linha de comando ou codifique-o.ao usar o arquivo mapeado no processo pai, certifique-se de que o processo filho grave o resultado no arquivo mapeado antes que o arquivo mapeado seja liberado no processo pai
Exemplo: processo pai
Processo filho
Para usar esse exemplo, você precisará criar uma solução com 2 projetos internos, pegar o resultado da construção do processo filho de% childDir% / bin / debug e copiá-lo para% parentDirectory% / bin / debug e executar o projeto pai
childDir
eparentDirectory
são os nomes das pastas dos seus projetos no pc boa sorte :)fonte
Como iniciar um processo (como um arquivo bat, script perl, programa do console) e ter sua saída padrão exibida no formulário do Windows:
Você pode encontrar
ProcessCaller
neste link: Iniciando um processo e exibindo sua saída padrãofonte
Você pode registrar a saída do processo usando o código abaixo:
fonte
A solução que funcionou para mim no win e no linux é a seguinte
fonte