Konsolenanwendung wartet auf Input...



  • Hallo ihr lieben!

    Ich habe folgendes Problem, bei dem es mir, auch nach intensiver Suche, noch verwehrt bleibt eine Lösung zu sehen:

    Ich habe ein Programm, welches eine einfache Konsolenanwendung(z.B. cmd) startet. Der Standartinput & -output wird in eine Anonyme Pipe gelegt, so dass ich diese einlesen/schreiben kann.

    So weit, so gut. Aber nun versuche ich verzweifelt herraus zu finden, wann die Anwenigung auf eine Eingabe wartet. Um bei dem Beispiel der cmd.exe zu bleiben mal folgendes Beispiel, ich hoffe dann wird klar, was ich meine:

    "cmd.exe starten"
    *Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

    C:\Users\Tim>**{WANN BIN ICH HIER?}**ping google.de

    Ping wird ausgeführt für google.de [173.194.35.184] mit 32 Bytes Daten:
    Antwort von 173.194.35.184: Bytes=32 Zeit=35ms TTL=57
    Antwort von 173.194.35.184: Bytes=32 Zeit=35ms TTL=57
    Antwort von 173.194.35.184: Bytes=32 Zeit=35ms TTL=57
    Antwort von 173.194.35.184: Bytes=32 Zeit=35ms TTL=57

    Ping-Statistik für 173.194.35.184:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
    Ca. Zeitangaben in Millisek.:
    Minimum = 35ms, Maximum = 35ms, Mittelwert = 35ms

    C:\Users\Tim>{WANN BIN ICH HIER?}*

    Es ist mir klar, dass ich einfach solange lesen kann, bis das ">" kommt, aber ich möchte es allgemeingültig halten, also auch für jedes andere Konsolenprogramm praktikabel sein. Ein Steuerzeichen o.ä. wird mir nicht in die Pipe übertragen. Handle zu der Pipe & dem Prozess sind selbstverständlich da. Es ist bestimmt nur eine simple Funktion, mit der ich diesen Zusand abfragen kann, aber auch nach rund 12h insensiver Recherche ist mir dieser nicht klar 😞

    Ich hoffe jemand hat eine Idee für mich 👍



  • Ich glaube ehrlich gesagt nicht dass das überhaupt geht.



  • Ich habe mir über so etwas auch schon mal Gedanken gemacht und bin zu dem Schluss gekommen, dass das nicht feststellbar ist. Ein Indiz wäre, wenn eine Weile kein Output mehr erzeugt wird, aber eben nur ein Indiz.
    Die Frage ist aber, wozu muss das Programm, dass den Child-Prozess erzeugt, das so genau wissen?



  • Für was braucht man sowas?


  • Mod

    Auch wenn das Command Fenster scheinbar arbeitet, nimmt es Tastatureingaben an.

    IMHO geht das ga rnicht ohne zu wissen ob die CMD.EXE gerade einen anderen Prozess gestartet hat. Man könnte also alle Prozesse enumerieren und sehen ob diese ein Kind des Command Fensters sind.

    Allerdigs schlägt das schon wieder fehl, wenn "dir" oder ein anderer interner Befehl ausgeführt wird.



  • Erst einmal vielen Dank für die vielen Hinweise.

    Zur Klärung der Frage, wozu man so etwas braucht: ich wollte ein paar Konsolenprogramme zusammenfassen und ein UI drüber legen. Primär einfach nur "just 4 fun". Ich bin auf das Problem gestoßen, mich damit beschäftigt und es wurmt mich einfach unglaublich, wenn ich ein Problem nicht lösen kann 😃



  • Naja gute Konsolenanwendungen kann man ja üblicherweise skripten.
    Und dann sollte das kein Problem sein, weil die dann keinen Input brauchen.

    Und cmd.exe brauchst du ja nicht um Konsolenanwendungen auszuführen, du kannst die ja genau so gut direkt starten. Oder auch cmd.exe mit /C starten, so dass das Ding gleich terminiert nachdem es gemacht hat was es machen sollte.

    Beschreib mal genauer wo du da auf ein Problem gestossen bist, vielleicht kann dir ja jmd. bei deinem konkreten Problem weiterhelfen, wenn schon nicht bei deinem Lösungsansatz.



  • Das ganze ist eigentlich nur eine Spielerei, nichts ernstes 😉
    Ich wollte mir ein Fehrnwartungstool schreiben, sprich die Konsole auf einen anderen PC "weiterleiten". Und dafür wäre es halt schön gewesen zu sehen, wann die Konsole den aktuellen Befehl abgearbeitet hat.



  • Du willst sowas wie Expect machen?


Log in to reply