¿Por qué Process.StandardInput.WriteLine no proporciona información a mi proceso?
Esta es mi primera pregunta aquí, así que seré lo más detallada posible. Actualmente estoy trabajando en un programa de C # (lo llamaremos TestProgram) que prueba un programa diferente escrito en C (al que me referiré como StringGen). Se supone que TestProgram ejecuta StringGen en una ventana de comandos, luego lo alimenta con un conjunto de cadenas de entrada y registra la salida de cada una. Cuando se ejecuta StringGen, comienza un bucle while que espera una entrada, envía esa entrada a la función de procesamiento y luego devuelve el resultado.
Mi problema viene de cuando intento que TestProgram envíe una cadena a StringGen. Estoy iniciando StringGen como un proceso e intento alimentarlo con la entrada Process.StandardInput.WriteLine (), luego busco la salida con Process.StandardOutput.ReadLine (). Antes de seguir elaborando, voy a proporcionar un código.
Aquí está la función principal para StringGen:
int main() {
char result[255];
char input[255];
do {
fgets(input, 100, stdin);
result = GetDevices(input); //Returns the string required
printf("%s", result);
} while (input != "quit");
return 0;
}
Aquí está el código C # donde defino StringGen como un proceso:
Process cmd = new Process();
ProcessStartInfo info = new ProcessStartInfo(command, arguements); // Command is the path to the C executeable for StringGen
info.WorkingDirectory = workingDirectory; // Working Directory is the directory where Command is stored
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.UseShellExecute = false;
cmd.StartInfo = info;
cmd.Start();
Luego sigo usando este proceso como tal:
using (var cmd)
{
// Loop through the input strings
String response;
foreach (exampleString in StringSet) // Loops through each string
{
cmd.StandardInput.WriteLine(exampleString.text); // This is the problem line
response = cmd.StandardOutput.ReadLine(); // System comes to a halt here
cmd.StandardOutput.Close();
if (response == "Something")
{
// Do this
}
else
{
// Do that
}
}
}
El comando WriteLine no parece proporcionar ninguna entrada a StringGen, por lo que el sistema se cuelga en ReadLine porque StringGen no está devolviendo ninguna salida. He intentado ejecutar StringGen en la línea de comandos y funciona bien, toma la entrada del teclado y devuelve las cadenas correctas. He intentado todo lo que puedo pensar y busqué en todo este sitio y en otros que intentan encontrar una solución, pero cada ejemplo de este tipo de código parece funcionar bien para todos los demás. No puedo ver lo que estoy haciendo mal. Si alguien pudiera sugerir una forma en que pueda enviar información a mi programa StringGen desde TestProgram, se lo agradecería mucho. Si he dejado algo importante fuera o si algo no está claro, hágamelo saber.
Notas: He probado scanf y fgets en StringGen, ambos producen el mismo resultado.
He intentado usar una cadena literal con WriteLine (), pero aún no tengo entrada.
He intentado usar Write () y Flush () en TestProgram pero sin éxito.
He intentado cerrar () el búfer de entrada para forzar una descarga, pero esto tampoco tiene ningún efecto.
No estoy demasiado familiarizado con C # ya que estoy editando el código de otra persona para realizar pruebas en StringGen.