Warum liefert Process.StandardInput.WriteLine keine Eingabe für meinen Prozess?

Dies ist meine erste Frage hier, damit ich so detailliert wie möglich werde. Ich arbeite derzeit an einem C # -Programm (wir nennen es TestProgram), das ein anderes in C geschriebenes Programm testet (das ich als StringGen bezeichnen werde). TestProgram soll StringGen in einem Befehlsfenster ausführen, ihm dann eine Reihe von Eingabezeichenfolgen zuführen und die Ausgabe für jede einzelne aufzeichnen. Wenn StringGen ausgeführt wird, startet es eine while-Schleife, die auf eine Eingabe wartet, diese Eingabe an die Verarbeitungsfunktion sendet und dann das Ergebnis zurückgibt.

Mein Problem entsteht, wenn ich versuche, TestProgram einen String an StringGen zu senden. Ich starte StringGen als Prozess und versuche, ihn mit Process.StandardInput.WriteLine () einzugeben und dann mit Process.StandardOutput.ReadLine () nach Ausgaben zu suchen. Bevor ich näher darauf eingehe, werde ich Code bereitstellen.

Hier ist die Hauptfunktion für 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;
}

Hier ist der C # -Code, in dem ich StringGen als Prozess definiere:

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();

Dann benutze ich diesen Prozess wie folgt:

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
                }
            }
       }

Der WriteLine-Befehl scheint StringGen keine Eingabe zu geben, und daher bleibt das System bei ReadLine hängen, da StringGen keine Ausgabe zurückgibt. Ich habe versucht, StringGen in der Befehlszeile auszuführen, und es funktioniert einwandfrei und nimmt Eingaben von der Tastatur entgegen und gibt die richtigen Zeichenfolgen zurück. Ich habe alles versucht, was mir einfällt, und habe überall auf dieser Website nach einer Lösung gesucht, aber jedes Beispiel für diese Art von Code scheint für alle anderen gut zu funktionieren. Ich kann nicht sehen, was ich falsch mache. Wenn jemand eine Möglichkeit vorschlagen könnte, wie ich von TestProgram aus Eingaben in mein StringGen-Programm übermitteln kann, wäre ich wirklich dankbar. Wenn ich etwas Wichtiges ausgelassen habe oder etwas unklar ist, lassen Sie es mich bitte wissen.

Anmerkungen: Ich habe sowohl scanf als auch fgets in StringGen ausprobiert, beide erzeugen das gleiche Ergebnis.

Ich habe versucht, einen Literal-String mit WriteLine () zu verwenden, aber immer noch keine Eingabe.

Ich habe versucht, Write () und Flush () in TestProgram zu verwenden, aber ohne Erfolg.

Ich habe versucht, den Eingabepuffer zu schließen (), um ein Leeren zu erzwingen, aber dies hat auch keine Wirkung.

Ich bin mit C # nicht allzu vertraut, da ich anderen Code bearbeite, um Tests mit StringGen durchzuführen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage