Ausgabe der DOS-Box auslesen

  • Hallo,

    ich habe ein Problem mit einem Skript. Und zwar will ich ein Programm starten und dann die Ausgabe der Kommandozeile auslesen.

    [autoit]

    #include<Constants.au3>
    If FileExists("C:\Programme\Cisco\Cisco AnyConnect VPN Client\vpncli.exe") Then
    Local $Status = Run(@ComSpec & " /c vpncli.exe", "C:\Programme\Cisco\Cisco AnyConnect VPN Client\" , @SW_SHOW, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
    $line = StdoutRead($Status)
    If @error Then ExitLoop
    MsgBox(0, "STDOUT gelesen:", $line)
    WEnd
    While 1
    $line = StderrRead($Status)
    If @error Then ExitLoop
    MsgBox(0, "STDERR gelesen:", $line)
    WEnd
    MsgBox(0, "Debug", "Wie aufregend...")
    EndIf

    [/autoit]

    Ich bekomme mit dem Code aber nichts angezeigt und finde meinen Fehler nicht.

    Normalerweise sieht die Ausgabe so wie auf dem angehängten Bild.

    Vielen Dank schonmal.

    Gruß Thomas

    • Offizieller Beitrag

    Mach mal das Anschließenede \ im Pfad weg.

  • Hi,

    das gleiche Ergebnis wie vorher. Es öffnet sich i mmer nur eine leere DOS-Box. Im Taskmanager ist die vpncli.exe aber dann gestartet.

    Hab den Code nochmal umgeschreiben zum testen.

    [autoit]

    #include<Constants.au3>
    Local $Ausgabe
    Local $Ergebnis
    ;$Ausgabe = Run(@ComSpec & " /c ping 127.0.0.1", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    $Ausgabe = Runwait(@ComSpec & " /c vpncli.exe", "C:\Programme\Cisco\Cisco AnyConnect VPN Client" , @SW_SHOW, $STDERR_CHILD + $STDOUT_CHILD)
    ;$Ausgabe = Run("C:\Programme\Cisco\Cisco AnyConnect VPN Client\vpncli.exe" ,"C:\Programme\Cisco\Cisco AnyConnect VPN Client", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    ;$Ausgabe = ShellExecute("C:\Programme\Cisco\Cisco AnyConnect VPN Client\vpncli.exe")
    ProcessWaitClose($Ausgabe)
    $Ergebnis= StdoutRead($Ausgabe)
    MsgBox(0, "STDOUT gelesen:", $Ergebnis)

    [/autoit]

    Wenn ich oben den Ping ausführe lasse bekomme ich das Ergebnis ausgelesen. Aber nicht mit der vpncli.exe.

    Wenn ich die EXE mit ShellExecute starte bekomme ich auch die richtige Anazeige in der DOS-Box. Mit ShellExecute kann ich aber StdoutRead nicht benutzen richtig?

    Gruß Thomas

    Einmal editiert, zuletzt von ThR (21. April 2012 um 00:34)

  • Versuche mal das hier:

    [autoit]


    #include<Constants.au3>
    local $foo = Run(@ComSpec & " /c vpncli.exe", "C:\Programme\Cisco\Cisco AnyConnect VPN Client\", @SW_HIDE, $STDERR_CHILD), $Ergebnis
    While ProcessExists ("vpncli.exe")
    $Ergebnis &= StderrRead($foo)
    WEnd
    MsgBox(0, "STDOUT gelesen:", $Ergebnis)

    [/autoit]
    • Offizieller Beitrag

    Und das hier?

    Spoiler anzeigen
    [autoit]

    #include<Constants.au3>
    Local $foo = Run(@ComSpec & " /c vpncli.exe", "C:\Programme\Cisco\Cisco AnyConnect VPN Client\", @SW_HIDE, 0x2 + 0x4), $Ergebnis, $Ergebnis_Err
    While ProcessExists($foo)
    $Ergebnis &= StdoutRead($foo)
    $Ergebnis_Err &= StderrRead($foo)
    WEnd
    MsgBox(0, "STDOUT gelesen:", $Ergebnis)
    MsgBox(16, "STDERR gelesen:", $Ergebnis_Err)

    [/autoit]

    Gruß
    Spider

  • Hi,
    schreib die Ausgabe doch einfach mal in eine Datei..
    Konsolenfenster öffnen(wie auch immer..) und folgenden Befehl eingeben:

    [autoit]

    C:\Programme\Cisco\Cisco AnyConnect VPN Client\vpncli.exe >vpncli.prt

    [/autoit]


    Wenn es dann eine .Prt-Datei gibt, lass sie dir anzeigen mit: Type vpcli.prt
    Sollte es die Datei nicht geben oder sie die Größe 0 haben haste noch ne andere Chance:
    Konsolenfenster öffnen(wie auch immer..) und folgenden Befehl eingeben:

    [autoit]

    C:\Programme\Cisco\Cisco AnyConnect VPN Client\vpncli.exe 2>&1 vpncli.prt

    [/autoit]


    Damit wird der Error-Kanal auf den normalen Ausgabekanal umgeleitet..
    Hat die Datei dann immer noch die Größe 0, haste das Problem gelöst..
    ..es geht nicht..
    Anderenfalls kannste die Datei einlesen und gut is..
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • Rückmeldung ist prima, leider unvollständig.. ;)
    Oben habe ich 2 Umleitungen angegeben, welche funktioniert denn nun?
    .. >vpncli.prt
    oder
    .. 2>&1 vpncli.prt
    Wenn das Umleiten in eine Datei klappt, sollteste aber die Ausgabe auch ohne Umweg einlesen können,
    doch das nur so am Rande..
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..