Problem mit Consoleauslesen -$STDOUT_CHILD und SW_HIDE

  • Hallo, :)
    Ich möchte für ein Consolen Programm eine GUI erstellen, die Gui steht dank Koda und funktioniert. Das einzige was ich nicht zum laufen bekomme ist das auslesen der Console.
    Wenn man den Beginn Button drückt soll das Consolen Programm mit den in der Gui ausgewählten Parameter starten und ich möchte das Ergebnis natürlich Ausgeben.

    Jetzt zum Problem ich bekomme bei @SW_Hide die Fehlermeldung "Error: Incorrect number of parameters in function call." Lässt man '2>&1' weg wird der selbe Fehler angegeben allerdings dann bei $STDOUT_CHILD

    [autoit]


    $ProcID= Run($Prog & ' 2>&1', $cmmandVar, @ScriptDir, @SW_HIDE, $STDOUT_CHILD)

    [/autoit]

    Ich hab zwar schon einige Dinge ausprobiert auch die ich im INet gefunden habe (wie das 2>&1), allerdings bin ich was AutoIt angeht Anfänger und als Programmierer vielleicht ein angefangener Fortgeschrittener. Daher läuft das bei mir meist nach Try & Error, ^^ ich hoffe das mir jemand sagen kann wo der Fehler in der Zeile ist. Mittlerweile hab ich am probieren keine Lust mehr. ;(

    MfG

    • Offizieller Beitrag

    Run kann max. 4 Parameter entgegennehmen, du rufst es mit 5 auf. :wacko:
    Bau dir den Programmaufruf ausserhalb des Runbefehls zusammen, bedenke dass einige Parameter als quotierter String angehängt werden könnten. Also unterschiedliche Quota verwenden.
    Übergib dann die Variable, die den parametrisierten Aufruf enthält an Run.
    Am Besten:
    Vorher in der Konsole testen, wie der Aufruf aussehen muss, damit es funzt.

  • Man muss aber nicht unterschiedliche Quota verwenden.
    Angenommen wir wollen diese Konsolenausgabe erzeugen:

    Code
    Ich bin ein "Test"!


    Gibt es 2 Möglichkeiten:

    [autoit]


    ConsoleWrite('Ich bin ein "Test"!' & @CRLF)

    [/autoit]


    Finde ich persönlich nicht so schön.

    [autoit]


    ConsoleWrite("Ich bin ein ""Test""!" & @CRLF)

    [/autoit]

    Ich bevorzuge eher die 2. Variante. :)

    lg chess

    • Offizieller Beitrag

    Ich bevorzuge eher die 2. Variante.


    Dann kommst du vermutlich aus einer (Programmier)Sprachecke, die nur eine Quota kennt und somit die Maskierung mit sich selbst erzwingt. :P
    Kann ich persönlich gar nix mit anfangen, viel zu unübersichtlich beim Lesen. ;)

  • Naja, andere Sprachecke?
    AutoIt ist meine erste Hochsprache, davor war nur HTML & Batch. ;)

    Ich finde sowas hier einfach schlimm:

    [autoit]


    $hGUI = GUICreate("GUI")
    ConsoleWrite('Die GUI wurde erstellt!' & @CRLF)

    [/autoit]


    Wenn sollte man sich auf ein Anführungszeichen festlegen, und nicht beide vermischt im Skript verwenden, finde ich.
    Weil das finde ICH unübersichtlich. :P

    lg chess

    • Offizieller Beitrag

    So unterschiedlich sind halt die Befindlichkeiten. :D
    An deinem Bsp. kann ich nun gar nix Schlimmes finden.
    Wobei ich es in der Regel so handle, dass Strings mit einfachem Anführungskennzeichen markiert werden und String im String mit doppeltem. Un das hat rein ergonomische Gründe, da es wesentlich einfacher ist, das einfache Anführungszeichen zu tippen, als das doppelte. :whistling:
    Aber wir wollen mal den Thread nicht total in OT überführen. ;)

  • Danke(!), hab Programmname und Parameter jetzt in eine Variable getan. Das Consolen Programm läuft und macht was es soll. Ich stand da wie ein Ochs vorm Berg :D

    Nun hab ich ein weiteres Problem die PID steht in der Variable (via MsgBox mal ausgegeben) und eigentlich wollte ich via Stringleft eine Zeile finden aber dies passiert nicht daher hab ich eine MsgBox für die $line gemacht um zusehen was da drin steht nur wird da gar nichts ausgegeben?

    [autoit]


    $ProcID= Run($ProgName, @ScriptDir, @SW_HIDE, $STDERR_CHILD +$STDOUT_CHILD)

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

    While 1
    $line= StdoutRead($ProcID)
    if @error Then ExitLoop
    MsgBox(0, "STDOUT read:", $line)
    WEnd

    [/autoit]

    Edit ich hab festgestellt das StdoutRead erst wenn das Programm fertig alles an $line übergibt aber dann verstehe ich nicht wie es hier http://www.youtube.com/watch?v=N04WrgHpb-0 funktionieren kann. Oder hängt das vom Programm ab ?(

    Einmal editiert, zuletzt von Fambu (21. Oktober 2012 um 18:09)