StderrRead Problem !

  • Moin,

    bitte entschuldigt den Doppelpost, aber ich glaube im englischsprachigen Forum versteht man nicht worauf ich hinaus will ...

    Also, ich möchte ein externes Tool starten und StderrREad & StdoutRead benutzen um die Ausgaben zu verwerten.

    Wenn ich es als Script laufen lasse funktioniert es komischerweise einwandfrei, aber wenn ich es kompiliere, dann bleibt es hängen !

    Der Fehler ist, wenn StderrRead keine Message erhält, dann pausiert das Script !
    Das soll es aber nicht !!!
    Ich habe in der Hilfe etwas über das "peek" Argument gelesen, aber verstehe nicht so recht wie ich den nutzen kann, bzw. ob es überhaupt die Lösung des Problems ist.

    Spoiler anzeigen
    [autoit]

    Func _UnRAR_Archive($sArchiveDir, $sArchive, $sPassword = '', $sDirectory = '')

    If FileExists($sArchiveDir & '\' & $sArchive) Then
    Select
    Case $sPassword = '' And $sDirectory = ''
    $pidUnRAR = Run(@ScriptDir & '\UnRAR.exe x -o+ "' & $sArchiveDir & '\' & $sArchive & '"', $sArchiveDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    _Stream_Read($pidUnRAR)
    If @error = 3 Then Return SetError(1) ; Password required.
    Case $sPassword = '' And $sDirectory <> ''
    $pidUnRAR = Run(@ScriptDir & '\UnRAR.exe x -o+ "' & $sArchiveDir & '\' & $sArchive & '" "' & $sDirectory & '"', $sArchiveDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    _Stream_Read($pidUnRAR)
    If @error = 3 Then Return SetError(1) ; Password required.
    Case $sPassword <> '' And $sDirectory = ''
    $pidUnRAR = Run(@ScriptDir & '\UnRAR.exe x -o+ -p"' & $sPassword & '" "' & $sArchiveDir & '\' & $sArchive & '"', $sArchiveDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    _Stream_Read($pidUnRAR)
    If @error = 2 Then Return SetError(2) ; Password incorrect.
    Case $sPassword <> '' And $sDirectory <> ''
    $pidUnRAR = Run(@ScriptDir & '\UnRAR.exe x -o+ -p"' & $sPassword & '" "' & $sArchiveDir & '\' & $sArchive & '" "' & $sDirectory & '"', $sArchiveDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    _Stream_Read($pidUnRAR)
    If @error = 2 Then Return SetError(2) ; Password incorrect.
    EndSelect
    EndIf

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

    EndFunc ;==>_UnRAR_Archive

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

    Func _Stream_Read($PID)

    While 1
    $line = StdoutRead($PID)
    If @error Then
    ExitLoop
    ElseIf StringInStr($line, 'No files to extract') Then
    ;Return SetError(1)
    ElseIf StringInStr($line, 'All OK') Then
    Return
    EndIf
    WEnd

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

    While 1
    $line = StderrRead($PID)
    If @error Then
    ExitLoop
    ElseIf StringInStr($line, 'password incorrect') And Not StringInStr($line, 'Enter password (will not be echoed)') Then
    Return SetError(2)
    ElseIf StringInStr($line, 'Enter password (will not be echoed)') Then
    Return SetError(3)
    EndIf
    WEnd

    EndFunc ;==>_Stream_Read

    [/autoit]

    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (23. Dezember 2007 um 21:53)

  • Habe das Problem anderweitig gelöst.

    Wenn ich bei einem Pw geschütztem Archiv 'UnRAR.exe' mit dem Parameter '-p""'(ohne Pw) aufrufe fragt es nach dem Pw und erwartet eine Eingabe.
    Nehme ich stattdessen den Parameter '-p-' (keine Pw Abfrage) beendet sich UnRAR.exe und mein Script läuft weiter.

    Die Antwort auf meine Frage ist es aber nicht !


    Gruzß
    Greenhorn