Почему Process.StandardInput.WriteLine не предоставляет ввод для моего процесса?
это мой первый вопрос, поэтому я буду настолько подробным, насколько смогу. В настоящее время я работаю над программой на C # (мы назовем ее TestProgram), которая тестирует другую программу, написанную на C (которую я буду называть StringGen). TestProgram должен запустить StringGen в командном окне, затем передать ему набор входных строк и записать выходные данные для каждой из них. Когда StringGen запущен, он запускает цикл while, который ожидает ввода, передает этот ввод в функцию обработки, а затем возвращает результат.
Моя проблема возникает, когда я пытаюсь, чтобы TestProgram отправил строку в StringGen. Я запускаю StringGen как процесс и пытаюсь передать входные данные с помощью Process.StandardInput.WriteLine (), а затем ищу вывод с помощью Process.StandardOutput.ReadLine (). Прежде чем продолжить, я приведу некоторый код.
Вот основная функция для 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;
}
Вот код C #, где я определяю StringGen как процесс:
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();
Затем я продолжу использовать этот процесс так:
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
}
}
}
Команда WriteLine, похоже, не дает никакого ввода в StringGen, и поэтому система зависает на ReadLine, потому что StringGen не возвращает никакого вывода. Я попытался запустить StringGen в командной строке, и он работает нормально, получает ввод с клавиатуры и выводит правильные строки обратно. Я перепробовал все, что мог придумать, и искал по всему этому сайту, а другие пытались найти решение, но каждый пример такого рода кода, кажется, работает хорошо для всех остальных. Я не вижу, что я делаю неправильно. Если бы кто-нибудь мог предложить способ, которым я могу представить свои данные в свою программу StringGen из TestProgram, я был бы очень благодарен. Если я пропустил что-то важное или неясно, пожалуйста, дайте мне знать.
Заметки: Я пробовал и scanf, и fgets в StringGen, оба дают одинаковый результат.
Я попытался использовать буквенную строку с WriteLine (), но до сих пор нет ввода.
Я пытался использовать Write () и Flush () в TestProgram, но безрезультатно.
Я пытался закрыть () входной буфер, чтобы вызвать сброс, но это также не имеет никакого эффекта.
Я не слишком знаком с C #, так как я редактирую чужой код для выполнения тестов на StringGen.