suitifiable Posted August 26, 2012 Posted August 26, 2012 So it's been a long time since I've done any scripting, and even back then I probably wouldn't have known the answer to this. Long story short I'm trying to log data from a COM port by using plink...I've gotten it setup to where I can launch plink and access the STDOUT and ultimately log it to a file. Eventually I'll be placing it a few places, but this is still proof of concept. Here is the current code: #include <Array.au3> #include <Constants.au3> #include <String.au3> $sPlink="PLINK.EXE" $sSession="PBXLink" $sLog="log.txt" $_PlinkHandle=Run(@ComSpec&" /c "&@ScriptDir&"\"&$sPlink&" "&$sSession,"",@SW_SHOWDEFAULT,7) $sLog=FileOpen("log.txt",1) While 1 Sleep(1000) $sData=StringStripWS(StdoutRead($_PlinkHandle),7) If $sData<>"" Then FileWriteLine($sLog,$sData) EndIf WEnd So I'm pretty sure that's not the best way to go at it...Without that Sleep(1000) it chews up 12% of my quad core CPU, and without that $sData<>"" it just fills the log file with whitespace. The problem is that this is receiving data at any random time (It's logging PBX call data) so I'm not sure the best way to handle it. I was thinking if there is a way to wait until the variable contains data, and maybe key in on the LF/CR. The way I see this there is the potential to get the data split across two lines since it could hit the sleep right in the middle of getting the data. Totally open to a better way of doing this, I'm comfortable in my noobness when it comes to scripting. I've been at this for a few hours (Don't worry, it started with messy MsgBox's and has quickly progressed to this point...Had to get back in sync) and I'm just out of steam. Also, since this may impact your response, the idea is this stays running 24/7 and just collects the data that the PBX sends after each call. There could be a bunch in a row (I haven't been able to simulate that yet, not too worried though) at any random interval. One thing I was worried about is if the variable containing the data would grow out of control over time. So far it seems like in my loop that after each FileWriteLine it's emptied?
PhoenixXL Posted August 27, 2012 Posted August 27, 2012 maybe this is the solutionGlobal $Var AdlibRegister('CheckVar') ;Function which will be called every 250ms to check $Var Sleep(3000) $Var=12 While 1 Sleep(10) WEnd Func CheckVar() If $Var Then ConsoleWrite('VarContains Data'&@CR) ;Say the user that the Var contains data AdlibUnRegister('CheckVar') ;Unregister the Function Exit -1 ;Exit with the Code -1 EndIf EndFunc feel free to ask any doubts Regards Phoenix XL My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now