Me gustaría ejecutar un programa de línea de comando externo desde mi aplicación Mono / .NET. Por ejemplo, me gustaría ejecutar mencoder . Es posible:
- ¿Para obtener la salida del shell de la línea de comandos y escribirla en mi cuadro de texto?
- Para obtener el valor numérico para mostrar una barra de progreso con el tiempo transcurrido?
c#
.net
mono
process.start
fuerte
fuente
fuente
Puede procesar su salida de forma síncrona o asíncrona .
1. Ejemplo sincrónico
Tenga en cuenta que es mejor procesar tanto la salida como los errores : deben manejarse por separado.
(*) Para algunos comandos (aquí
StartInfo.Arguments
) debe agregar la/c
directiva , de lo contrario, el proceso se congela en elWaitForExit()
.2. Ejemplo asincrónico
Si no necesita complicar las operaciones con la salida, puede omitir el método OutputHandler, simplemente agregando los controladores directamente en línea:
fuente
Muy bien, para cualquiera que quiera leer tanto Errores como Salidas, pero se bloquee con cualquiera de las soluciones, proporcionadas en otras respuestas (como yo), aquí hay una solución que construí después de leer la explicación de MSDN para la
StandardOutput
propiedad.La respuesta se basa en el código de T30:
fuente
La forma estándar de .NET de hacer esto es leer de la secuencia de Salida Estándar del Proceso . Hay un ejemplo en los documentos vinculados de MSDN. De manera similar, puede leer desde StandardError y escribir en StandardInput .
fuente
Es posible obtener la salida del shell de la línea de comandos de un proceso como se describe aquí: http://www.c-sharpcorner.com/UploadFile/edwinlima/SystemDiagnosticProcess12052005035444AM/SystemDiagnosticProcess.aspx
Esto depende del mencoder. Si supera este estado en la línea de comando, entonces sí :)
fuente
puede usar la memoria compartida para los 2 procesos para comunicarse, consulte
MemoryMappedFile
principalmente creará un archivo mapeado de memoria
mmf
en el proceso principal utilizando la instrucción "using", luego creará el segundo proceso hasta que finalice y le permita escribir el resultado en elmmf
usoBinaryWriter
, luego lea el resultado delmmf
proceso principal, también puede pase elmmf
nombre usando argumentos de línea de comando o codifíquelo.cuando utilice el archivo asignado en el proceso principal, asegúrese de que el proceso secundario escriba el resultado en el archivo asignado antes de que el archivo asignado se libere en el proceso principal
Ejemplo: proceso padre
Proceso hijo
para usar este ejemplo, deberá crear una solución con 2 proyectos en su interior, luego tomar el resultado de compilación del proceso secundario de% childDir% / bin / debug y copiarlo en% parentDirectory% / bin / debug y luego ejecutar el proyecto principal
childDir
yparentDirectory
son los nombres de carpeta de sus proyectos en la PC buena suerte :)fuente
Cómo iniciar un proceso (como un archivo bat, un script perl, un programa de consola) y mostrar su salida estándar en un formulario de Windows:
Puede encontrar
ProcessCaller
en este enlace: Iniciar un proceso y mostrar su salida estándarfuente
Puede registrar la salida del proceso usando el siguiente código:
fuente
La solución que funcionó para mí en win y linux es la siguiente
fuente