Por que o Process.StandardInput.WriteLine não fornece entrada para o meu processo?
Esta é a minha primeira pergunta aqui, então vou ser o mais detalhado possível. Atualmente estou trabalhando em um programa c # (vamos chamá-lo TestProgram) que testa um programa diferente escrito em C (que eu vou referir como StringGen). O TestProgram deve rodar o StringGen em uma janela de comando, depois alimentá-lo com um conjunto de strings de entrada e gravar a saída para cada um. Quando StringGen é executado, ele inicia um loop while que aguarda por uma entrada, envia essa entrada para a função de processamento e, em seguida, retorna o resultado.
Meu problema vem quando eu tento fazer com que o TestProgram envie uma string para o StringGen. Eu estou começando StringGen como um processo e tentando alimentá-lo de entrada com Process.StandardInput.WriteLine (), em seguida, procurando saída com Process.StandardOutput.ReadLine (). Antes de elaborar mais, vou fornecer algum código.
Aqui está a principal função do 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;
}
Aqui está o código C # onde eu defino StringGen como um processo:
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();
Então eu uso esse processo da seguinte forma:
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
}
}
}
O comando WriteLine não parece fornecer nenhuma entrada para StringGen e, portanto, o sistema trava no ReadLine porque StringGen não está dando nenhuma saída de volta. Eu tentei executar StringGen na linha de comando e funciona bem e leva a entrada do teclado e retorna as cordas corretas para trás. Eu tentei tudo o que posso pensar e procurou em todo este site e outros tentando encontrar uma solução, mas cada exemplo deste tipo de código parece funcionar bem para todos os outros. Eu não consigo ver o que estou fazendo errado. Se alguém puder sugerir uma maneira de enviar uma entrada para o meu programa StringGen do TestProgram, ficaria muito grato. Se eu tiver deixado algo importante para fora ou se algo não estiver claro, por favor me avise.
Notas: Eu tentei scanf e fgets em StringGen, ambos produzem o mesmo resultado.
Eu tentei usar uma seqüência literal com WriteLine (), mas ainda não entrada.
Eu tentei usar Write () e Flush () no TestProgram, mas sem sucesso.
Eu tentei fechar () o buffer de entrada para forçar um flush, mas isso também não tem efeito.
Eu não estou muito familiarizado com o C # como estou editando código de alguém para realizar testes no StringGen.