Paul Randall schrieb:
[...]
> I wish I knew of a native WXP command line utility example that would take a
> significant period over which to execute but which only sends a line of
> output occasionally, so we could have a VBScript display each line from
> StdOut as it occurs. Perhaps you know of something? [...]
I used:
-- sleeper.vbs
Option Explicit
Dim nCount : nCount = 5
Dim nSleep : nSleep = 500
If 0 < WScript.Arguments.Count Then nCount = CInt( WScript.Arguments( 0 ) )
If 1 < WScript.Arguments.Count Then nSleep = CInt( WScript.Arguments( 1 ) )
Do Until 1 > nCount
WScript.Echo "Sleeper", nCount, Now
nCount = nCount - 1
WScript.Sleep nSleep
Loop
-- sleeper.bat
@cho off
echo sleeper.bat start
cscript sleeper.vbs %1 %2
echo sleeper.bat end
-- testsleeper.vbs
Option Explicit
Const WshRunning = 0
Const WshFinished = 1
Dim oWSH : Set oWSH = CreateObject( "WScript.Shell" )
Dim sCmd : sCmd = "cscript sleeper.vbs"
sCmd = "sleeper.bat 5 1000"
Dim oExec : Set oExec = oWSH.Exec( sCmd )
Do Until oExec.Status = WshFinished
WScript.Echo "testSleeper", Now, oExec.StdOut.ReadLine()
Loop
to get
testSleeper 20.01.2009 22:32:44 Sleeper 5 20.01.2009 22:32:44
testSleeper 20.01.2009 22:32:44 Sleeper 4 20.01.2009 22:32:45
testSleeper 20.01.2009 22:32:45 Sleeper 3 20.01.2009 22:32:45
testSleeper 20.01.2009 22:32:45 Sleeper 2 20.01.2009 22:32:46
testSleeper 20.01.2009 22:32:46 Sleeper 1 20.01.2009 22:32:46
testSleeper 20.01.2009 22:32:46
testSleeper 20.01.2009 22:32:47
testSleeper 20.01.2009 22:32:47
resp.
cscript testsleeper.vbs
testSleeper 20.01.2009 22:30:48
testSleeper 20.01.2009 22:30:48 C:\wis\_vbs\0506\dev\forum
testSleeper 20.01.2009 22:30:48 echo sleeper.bat start
testSleeper 20.01.2009 22:30:48 sleeper.bat start
testSleeper 20.01.2009 22:30:48
testSleeper 20.01.2009 22:30:48 C:\wis\_vbs\0506\dev\forum
testSleeper 20.01.2009 22:30:48 cscript sleeper.vbs 5 1000
testSleeper 20.01.2009 22:30:48 Sleeper 5 20.01.2009 22:30:48
testSleeper 20.01.2009 22:30:48 Sleeper 4 20.01.2009 22:30:49
testSleeper 20.01.2009 22:30:49 Sleeper 3 20.01.2009 22:30:50
testSleeper 20.01.2009 22:30:50 Sleeper 2 20.01.2009 22:30:51
testSleeper 20.01.2009 22:30:51 Sleeper 1 20.01.2009 22:30:52
testSleeper 20.01.2009 22:30:52
testSleeper 20.01.2009 22:30:53 C:\wis\_vbs\0506\dev\forum
testSleeper 20.01.2009 22:30:53 echo sleeper.bat end
testSleeper 20.01.2009 22:30:53 sleeper.bat end
testSleeper 20.01.2009 22:30:53
testSleeper 20.01.2009 22:30:53
testSleeper 20.01.2009 22:30:53
I *think* that shows that Exec.StdOut.Read* gets the data as soon as
possible (even if you use an intermediate .bat file).