Dos Output von "fremden" Prozess lesen

  • Hallo!

    Wie schon in meinen Titel geschrieben möchte ich einen Dosouput auslesen. Die Herausforderung ist das der Prozess nicht von AutiIT aus gestartet wird. Geht so etwas?

    Was habe ich bisher:

    [autoit][/autoit][autoit][/autoit][autoit]

    ;Erst was tun wenn der Prozess "robocopy.exe" gestartet worden ist
    do
    $ret = ProcessGetStats ("robocopy.exe")
    sleep (10)
    until $ret <> 0

    [/autoit][autoit][/autoit][autoit]

    ;Hier den Stream lesen
    do
    $ret = ProcessGetStats ("robocopy.exe")
    $line = StdoutRead($ret)
    if $line <> "" then
    ConsoleWrite($line & @crlf)
    endif
    until $ret = 0

    [/autoit]

    Das Programm reagiert, da das Script brav wartet bis ich einen Robocopy Befehl im Dos-Fenster gestartet habe, und beentet auch brav wenn der Copy-Prozess abgeschlossen ist!
    Nur beim "Consolewrite" sehen ich nichts!

    lg
    Racer

  • Meines wissens nach, kann nur der Elternprozess auf den Standard Output eines Prozesses zugreifen. Du müsstest also Robocopy im Script starten, dann ist es kein Problem den Stdout Stream zu registrieren.
    Gibt es einen bestimmten Grund, warum du das nicht so machst?

  • Dachte ich mir schon das es nicht so einfach geht :(

    Aus dem Script heraus hatte ich keine Probleme - das ist ja sehr gut dokumentiert, aber in diesen speziellen Fall hätte ich es getrennt benötigt!

    Warum tut man so was: Eigentlich brauche nur einen einfachen (optisch ansprechenden) Fortschrittsbalken, der aber auch dann reagiert wenn per Hand in einem Dosfenster ein robocopy angestossen wird! Ergo zwei eigenständige Prozesse die nicht miteinander Verwandt sind :)

    lg

  • Ah, das macht Sinn ^^ . Wäre es vielleicht eine Lösung, wenn du eine kleine GUI schreibst, die einen neuen Robocopy Prozess starten kann? Das kann ja letztendlich genauso aussehen wie eine normale Konsole.
    Du möchtest aber vermutlich eine gewöhnliche Konsole verwenden mit der du nicht nur Robocopy bedienen kannst, oder?

    Edit: Eventuell kannst du auch anstelle von Robocopy ein AutoIt Programm über die Konsole starten, das die Parameter einfach an einen Robocopy Prozess weitergibt. Ich weiß nur nicht wie sauber sich sowas integrieren ließe.