Puedo ejecutar un proceso de línea de comando usando process.start()
. Puedo proporcionar entrada usando la entrada estándar. Después de eso, cuando el proceso exige la entrada del usuario de nuevo, ¿cómo puede mi programa saber y pasar la entrada a ese exe?Ejecutar el comando de línea de comando interactivo usando C#
Respuesta
Hay un example here que suena similar a lo que necesita, utilizando Process.StandardInput
y una StreamWriter
.
Process sortProcess;
sortProcess = new Process();
sortProcess.StartInfo.FileName = "Sort.exe";
// Set UseShellExecute to false for redirection.
sortProcess.StartInfo.UseShellExecute = false;
// Redirect the standard output of the sort command.
// This stream is read asynchronously using an event handler.
sortProcess.StartInfo.RedirectStandardOutput = true;
sortOutput = new StringBuilder("");
// Set our event handler to asynchronously read the sort output.
sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
// Redirect standard input as well. This stream
// is used synchronously.
sortProcess.StartInfo.RedirectStandardInput = true;
sortProcess.Start();
// Use a stream writer to synchronously write the sort input.
StreamWriter sortStreamWriter = sortProcess.StandardInput;
// Start the asynchronous read of the sort output stream.
sortProcess.BeginOutputReadLine();
Console.WriteLine("Ready to sort up to 50 lines of text");
String inputText;
int numInputLines = 0;
do
{
Console.WriteLine("Enter a text line (or press the Enter key to stop):");
inputText = Console.ReadLine();
if (!String.IsNullOrEmpty(inputText))
{
numInputLines ++;
sortStreamWriter.WriteLine(inputText);
}
}
esperanza de que ayuda a
gracias de nuevo. pero esto es específico de sort.exe i m generate exe en tiempo de ejecución para cada usuario. No sé qué programa va a escribir. – rajshades
Creo que puede usar "cmd.exe" en lugar del ejecutable que eligieron. Es un truco, pero podría hacer el trabajo –
Querido Robert, puedes explicar cómo usar cmd.exe para mi problema – rajshades
Si entiendo correctamente, creo que deberías poder hacerlo redireccionando la entrada/salida estándar usando RedirectStandardOutput y RedirectStandardInput.
El proyecto WinSCP tiene una muestra de C# para saber cómo comunicarse con él de esta manera. Lo puedes encontrar aquí: SFTP file transfers in .NET (aunque esta muestra recoge solamente la salida sin utilizar en absoluto, pero la técnica debe ser la misma.)
gracias por su respuesta. lo intenté. pero el proceso que exige la entrada del usuario no está predefinido. el escenario es como 1. Quiero diseñar compliler en línea para C# 2. puedo construir el programa usando el código dom n cretae exe 3. ahora quiero ejecutar ese exe a través de C# 4. el usuario puede escribir cualquier tipo de programa que necesita la entrada del usuario en la etapa diff. espero que hayas entendido todo el escenario – rajshades
@rajshades: Hubiera pensado que sería similar, solo que en vez de enviar todos los comandos de una vez, enviarías un comando, leerías la salida, enviarías el siguiente comando etc. Aunque no he probado esto. Sin embargo, como nota general, si está creando el exe, ¿no puede tratar de darle una mejor forma de comunicarse con él (WCF, sockects de TCP/IP, nombre de las tuberías, etc.)? –
usted quiere mirar hacia arriba IPC. Como Robert mostró anteriormente, la clase Process
en .NET lo ayudará. Pero específicamente para su problema (cómo saber cuándo escribir datos): no puede. No genéricamente
Si conoce la entrada requerida (por ejemplo, "yyy"), puede proporcionarla en el STDIN
del proceso creado. No tiene que esperar que el programa solicite esta información: simplemente leerá STDIN
cuando quiera datos.
Si necesita procesar la salida de los programas para decidir qué escribir en STDIN
, intente leer los procesos STDOUT
. Sin embargo, puede tener problemas con el enrojecimiento ...
- 1. Ejecutar comando de línea de comando desde NSIS
- 2. Línea de comando args en el programa C usando Netbeans
- 3. Herramienta de línea de comando en Objective-C usando Foundation?
- 4. ¿Cómo puedo ejecutar un comando de línea de comando desde un programa en C++
- 5. Java ejecutar el programa de línea de comando
- 6. Ejecutar un comando de línea de comandos desde CruiseControl.NET
- 7. Ejecutar el comando vim desde la línea de comandos
- 8. ¿Cómo ejecutar el código PHP desde la línea de comando?
- 9. línea de comando TortoiseSVN diff
- 10. Genere dinámicamente el comando de la línea de comando, luego invoque usando powershell
- 11. tratando de ejecutar el comando git usando el script python
- 12. C++ y opciones de línea de comando
- 13. No se puede ejecutar git desde la línea de comando
- 14. Ejecutar script SQL desde la línea de comando
- 15. .NET C# Aplicación GUI Línea de comando
- 16. leer el interruptor de línea de comando
- 17. Cómo ejecutar TestNG desde la línea de comando
- 18. Ejecutar archivo jar con argumentos de línea de comando
- 19. ejecutar la aplicación de línea de comando interactiva desde java
- 20. Ejecutar línea de comandos y devolver la salida del comando
- 21. Ejecutar línea de comando a través de php?
- 22. Línea de comando de Maven
- 23. Problema al ejecutar el script oracle desde la línea de comando usando sqlplus
- 24. Ejecutar un comando dentro de Vim desde la línea de comando
- 25. Ejecución de un comando interactivo desde dentro pitón
- 26. Ejecutar el comando CMD desde el código
- 27. Ejecutar el script de PowerShell desde C# con los argumentos de la línea de comando
- 28. bash para el comando en línea
- 29. ¿Cómo puedo ejecutar un comando de shell usando VBA?
- 30. no se puede ejecutar swing desde la línea de comando
Puede que le interese [esta publicación] (http://www.codeducky.org/process-handling-net) cubre muchas de las complejidades de trabajar con. Procesos NET, particularmente alrededor de trabajar con entrada y salida – ChaseMedallion