Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Capture and display STDOUT at the same time

Tags:

stdout

autoit

I have the following code to capture and process the Run command output. How do I modify it such that the Run command window displays output and at the same time the output gets logged? Replacing @SW_HIDE with @SW_SHOW (or the equivalent) just shows a blank command window.

Something similar to the linux tee command which logs to file while it prints STDOUT.

$CurrentPID = Run(@ComSpec & ' /c ' & $CurrentLogCmd, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

If Not ProcessWaitClose($CurrentPID,60) Then
    WriteLog("[Warning] Timed-out.Finding date in current hour raw log -" & $CurrentLogFileName)
    $F_LogWarningExist = 1
    Return $C_SUCCESS ; Take chances and proceed with parsing raw logs
EndIf

$CurrentOutput = StdoutRead($CurrentPID)
like image 465
Siva Avatar asked May 09 '13 14:05

Siva


People also ask

Can You pipe both stdout and stderr at the same time?

Normally you’re only able to do the above with stdout. After all, you can’t pipe both stdout and stderr to tee. But we can combine redirection with the tee command to both echo and save the output and error streams at the same time.

Is it possible to capture stdout and stderr streams of tests?

It would be beneficial to capture the stdout and stderr streams of each test and display them all separated after all tests have been completed. Make it easy to look at with colors and stuff.

How to log errors from stderr to stdout?

Please note that the pipe will catch stdout only, errors to stderr are not processed by the pipe with tee. If you want to log errors (from stderr), use: This means: run command and redirect the stderr stream (2) to stdout (1).

What is the difference between stdout and stdin in SED?

By default, sed prints every line so in this case stdout will be the same as stdin (i.e. you'll see the entire output of myscript on screen). Show activity on this post. at least it worked on my server few minutes ago...


1 Answers

ConsoleWrite(_getDOSOutput('ipconfig /all') & @CRLF)

Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
            $text &= StdoutRead($Pid, False, False)
            If @error Then ExitLoop
            Sleep(10)
    WEnd
    Return StringStripWS($text, 7)
EndFunc   ;==>_getDOSOutput

Maybe this helps you out.

like image 133
Xenobiologist Avatar answered Sep 18 '22 23:09

Xenobiologist