Jump to content
olmanRvr

write return value of exe call to text file

Recommended Posts

olmanRvr

I have a compiled script :-timeStampSecs.exe which returns timestamp in seconds. I call it in FileWrite to write the time stamp in a text file.But it writes some other values instead of the timestamp. Please help.

thanks

olmar

The script is below:-

$kNum=run("timeStampSecs.exe","",1); also tried with flags 2,4,8,10
$hFile=FileOpen("timeStamp.txt",2)
FileWrite($hFile,"the key is: "&$kNum)
FileClose("$hFile")

;Code of thetimeStampSecs.exe:-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#include <Date.au3>

Func secFromEpoch()
Local $ts=_DateDiff( "s","1970/01/01 00:00:00",_NowCalc())
    $ts=String($ts)
    ConsoleWrite("timeStamp is: "&$ts&@CRLF)
        Return $ts
EndFunc
secFromEpoch()

 

Share this post


Link to post
Share on other sites
kylomas

olmanRvr,

Look at the help file for run.  RUN returns the PID if successful.  If you want to write the time stamp to a file you will have to do that in the script that calculates it.  You can pass in a file name as a command line parameter if you wish.

kylomas


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
olmanRvr

Hi, Thanks for the quick reply.Let me try your suggestion .Will let you know

olmar

Share this post


Link to post
Share on other sites
Melba23

olmanRvr,

Or you can read the return stream of the process like this:

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

Local $iPID = Run("timeStampSecs.exe", "", @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
Local $sOutput
While 1
    $sTemp = StdoutRead($iPID)
    $sTemp &= StderrRead($iPID)
    ; Exit the loop if the process closes or StdoutRead returns an error.
    If @error Then
        ExitLoop
    Else
        $sOutput &= $sTemp
    EndIf
    Sleep(10)
WEnd
MsgBox($MB_SYSTEMMODAL, "Stdout Read:", $sOutput)

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
snoopie
FileClose("$hFile")

should rather be 

FileClose($hFile)

just a typo though.

When calling command line executables I quite often have more succes using:

Run(@ComSpec & " /c " & ...)

 

Share this post


Link to post
Share on other sites
olmanRvr

Instead of Run used RunWait as per Jos .Same issue--- writing PID numbers in place of the time stamp as wanted.Also removes quotes from fileclose  like "$hFile"-->$hFile but doesn't help.

Working on reading the return stream(as per Melba23's suggestion).

 

see you.........

Share this post


Link to post
Share on other sites
olmanRvr

Read stream of  run call to timeStampSecs.exe .But still getting blank output(in consoleWrite.See code below:--

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

Func readStream()
            Local $iPID = Run("timeStampSecs.exe", "", @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
        Local $sOutput
        While 1
            $sTemp = StdoutRead($iPID)
            $sTemp &= StderrRead($iPID)
            ; Exit the loop if the process closes or StdoutRead returns an error.
            If @error Then
                ExitLoop
            Else
                $sOutput &= $sTemp
            EndIf
            Sleep(10)
        WEnd
        MsgBox($MB_SYSTEMMODAL, "Stdout Read:", $sOutput)
        ConsoleWrite("ts is: "&$sOutput&@CRLF)
        Return $sOutput
EndFunc
readStream()

 

Share this post


Link to post
Share on other sites
Jos
18 minutes ago, olmanRvr said:

 

Instead of Run used RunWait as per Jos .Same issue--- writing PID numbers

 

Nah, RunWait() returns the Returncode of the shelled program. ;)

Jos


SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
Melba23

olmanRvr,

The  StdoutRead code worked for me with a compiled version of the script you posted in the OP, as did Jos' suggestion.

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
kylomas

olmanRvr,

Works perfectly for me like this (M23 code modified)...

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

Local $iPID = Run(@scriptdir & "\timeStampSecs.exe", "", @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
Local $sOutput
While 1
    $sOutput &= StdoutRead($iPID)
    If @error Then ExitLoop
    Sleep(10)
WEnd
MsgBox($MB_SYSTEMMODAL, "Stdout Read:", $sOutput)

kylomas


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
olmanRvr

Hi kylomas,

Tried the code  you have shown.Yes, it is showing the timestamp in  a GUI window.Problem arises when I  add  the following line:-

ConsoleWrite("value is: "&$sOutput&@CRLF)

ConsoleWrite fails to write the value.Same issue occurs when writing the value of  $sOutput to a text file.Weird thing is if I replace the 

timeStampSecs.exe with  genKeyNum.exe it works fine !! Any idea, anyone please?

example below:

;Only difference to the previous function is that another  exe file is invoked
Func runExegenKeyNum();the exe fetches the physical drive number
        Local $iPID = Run(@scriptdir & "\genKeyNum.exe", "", @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
        Local $sOutput
        While 1
            $sOutput &= StdoutRead($iPID)
            If @error Then ExitLoop
            Sleep(10)
        WEnd
        MsgBox($MB_SYSTEMMODAL, "Stdout Read:", $sOutput)
        ConsoleWrite("value is; "&$sOutput&@CRLF)
        Return $sOutput
EndFunc
 runExegenKeyNum()
 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 ;code for genKeyNum.exe
 
 Func gtSrNo()
        $wbemFlagReturnImmediately = 0x10
        $wbemFlagForwardOnly = 0x20
        $colItems = ""
        $strComputer = "localhost"
        Global $Output=""
        $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
        $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", _
        $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    For $oItm In $colItems
        $Output = $Output & $oItm.SerialNumber & @CRLF
    Next
        ConsoleWrite($Output&@CRLF)
    Return $Output;$Output is the serial; number
EndFunc

 

Edited by olmanRvr
typho

Share this post


Link to post
Share on other sites
jchd

Sideways offer: why not including the various function in the main script instead of invoking them compiled as as many executables?


This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites
olmanRvr

Hi,

I would hard code these values(Hd srnum&timestamp) into the code for each user, basically to bind it to a single machine for a predefined period.Hence in the last moment, after user clicks download button,these values are fetched and incorporated into the script & then compiled .Which will, then be downloaded.

But thanks for your reply

olmar

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

  • Similar Content

    • fenhanxue
      By fenhanxue
      in msdn :https://msdn.microsoft.com/en-us/library/windows/desktop/aa384045(v=vs.85).aspx
      it says:

       
      I want to how how can i get the Return value (S_OK  or  error value )
      here is my codes as follow:
      Local $post_data = '123' Local $post_url = 'http://127.0.0.1/test.php' Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1") $oHTTP.Open("POST", $post_url, True) Local $Return_Value = $oHTTP.Send($post_data) $oHTTP.WaitForResponse(-1) Local $res = $oHTTP.responsetext MsgBox(0,'$Return_Value',$Return_Value);IT shows nothing ;why ? how can i get S_OK or error value ?  
    • LoneWolf_2106
      By LoneWolf_2106
      Hi everybody,
       
      i have a simple question, i have a text file with empty rows, i want to remove/delete them. Is there any function which might help me?
       
      Thanks in advance.
       
      Regards
    • FrancescoDiMuro
      By FrancescoDiMuro
      Good morning community!
      I am working on a script which read from a text file ( .txt ) and should import all the content in a SQLite3 DB, in order to execute some queries that should be difficult to execute on a text file.
      So, I was looking for something very very fast, because the file could be very large ( I don't know exaclty how much can became big, but I know a lot of rows, it's a log file ... )
      I found the "Import method", but I don't know If I can implement it in a query ( @jchd, it's your turn!  )
      Do you know some methods that I can implement in my script to have a very very fast import of thousands and thousands rows in a SQLite3 DB?
      Thanks a lot
      Francesco
    • kneze
      By kneze
      Hi all,
      i would like to enter a vlaue to Inputbox 1 an press button1. Script should search value in a text file and put value after "; " to Inputbox 2.
      #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.14.2 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <file.au3> $Form1 = GUICreate("Form1", 257, 119, 192, 124) $Input1 = GUICtrlCreateInput("Input1", 15, 35, 121, 21) $Input2 = GUICtrlCreateInput("Input2", 15, 60, 121, 21) $Button1 = GUICtrlCreateButton("Button1", 145, 35, 75, 25) GUISetState(@SW_SHOW) $iLines = _FileCountLines(@ScriptDir & "\data.txt") ;MsgBox(0, "Char read:", $ilines) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 EndSwitch WEnd can anyone help?
      data.txt
    • caramen
      By caramen
      Hello guy got some trouble in this easy script
       
      Case $BoutonWhrite1 $Case1 = MsgBox (4,"Are you sure ?" ,"Reg key gonna be changed." ) While 1 If $Case1 = "No" Then ConsoleWrite(">Case -1 Started" & @CRLF) ExitLoop EndIf $InputType = InputBox ("Value Type ?", 'Type of key to write: "REG_SZ", "REG_MULTI_SZ", "REG_EXPAND_SZ", "REG_DWORD", "REG_QWORD", or "REG_BINARY".' ) ;~ RegWrite (""&Reg1,""&$RegName1,""&$InputType, ""&$RegValue1) ExitLoop WEnd I tryed
      If $case1 = 1
      If $case1 = -1
      If $case1 = "No"
       
      What is the returned value by the msg box YES or NO ?
       
      The script is going wrong about the final purpose (Whrite a Registry key if the Script user unswer YES ) But dont take attention i am gonna corect after get the returned value xD it was for testing. 
×