Jump to content
Sign in to follow this  
rudi

StdOutRead(): is it possible to "Attach" to a lauched CMD.EXE?

Recommended Posts

rudi

Hi.

I'm just wondering, if it might be possible, to open a CMDline Program and to use StdOutRead() / StdErrRead() to "tee" the output to one log file? I want to still be able to interact with the CMDline Program (type in commands, read the StdOut StdErr Output).

Is "tee-ing" possible with StdOutRead() / StdErrRead()

#include <date.au3>
#include <Constants.au3>

;  0x2 ($STDOUT_CHILD) = Provide a handle to the child's STDOUT stream
;  0x4 ($STDERR_CHILD) = Provide a handle to the child's STDERR stream

$Log = "C:\temp\Std-out-err-read.txt"
$hLog = FileOpen($Log, 2 + 8)
FileWriteLine($hLog, _NowCalc())
FileWriteLine($hLog, "--------------------------------------------------------------------------------------------")

$ExitReason = ""

; when I specify $stdout_child / $stdout_child + $stderr_child, the process dies immediately.
; When I truncate the line, so that it ends " ...,@sw_show)", the cmd box remains open as expected.
$pid = Run(@ComSpec & " /k echo this is a first line...", @TempDir, @SW_SHOW, $STDOUT_CHILD + $STDERR_CHILD)
While ProcessExists($pid)

    $StdOut = StdoutRead($pid)
    If @error Then
        $ExitReason &= "StdOutRead Error " & @error & @CRLF
        ExitLoop
    EndIf
    If $StdOut <> "" Then FileWrite($hLog, $StdOut)

    $StdErr = StderrRead($pid)
    If @error Then
        $ExitReason &= "StdErrRead Error " & @error & @CRLF
        ExitLoop
    EndIf
    If $StdErr <> "" Then FileWriteLine($hLog, $StdErr)

WEnd

FileWriteLine($hLog, @CRLF & "--------------------------------------------------------------------------------------------")
FileWriteLine($hLog,_NowCalc())

ConsoleWrite($ExitReason & @LF)
FileWriteLine($hLog,$ExitReason)
FileClose($hLog)

Run ("notepad.exe " & $Log)

the CMD box just "blinks" once and disappears. Output to file is this:

2013/02/05 13:54:16
--------------------------------------------------------------------------------------------
this is a first line...

C:\Users\admin\AppData\Local\Temp>
--------------------------------------------------------------------------------------------
2013/02/05 13:54:16

Propably simply WAD?

Regards, Rudi.


Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Share this post


Link to post
Share on other sites
guinness

What's wrong with what you have now?


UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Share this post


Link to post
Share on other sites
rudi

Hi.

"cmd.exe /k echo something" should *NOT* close, after the command was executed. But the CMD box opens, and instantly closes again. So I cannot type further commands into that box. When you alter the script above, so that the *_child values are *NOT* specified, the box remains open, as needed. But then, obviously, the printable output is not logged to file.

So...

  • StdIn shall remain connected to the keyboard
  • StdOut + StdErr shall display to the box *AND* at the same time be logged to file.

Finally I want to use this for the IBM TSM Backup Server Command Line Tools ("dsmadmc.exe" / "dsmadmc.exe -console") to log all visible output to a text file, to be able to get all commands typed into the box and all system responses for documentation purposes.

Basically like that "PUTTY.EXE" option "log all printable output to file".

Any other approach to achive this would be fine.

Edited by rudi

Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Share this post


Link to post
Share on other sites
water

Replace

$STDOUT_CHILD + $STDERR_CHILD
with
BitAnd($STDOUT_CHILD, $STDERR_CHILD)
Here it works now.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-09-01 - Version 1.3.4.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×