|
StdOut and StdErr reading... Hello!
I'm working on a script to automate SFTP operations (using a text-
based sftp client).
My idea is to use the Exec() method to run the client, send commands
via StdIn and receive output via StdOut and StdErr.
The problem is that when I try to read buffers using ReadAll or
AtEndOfStream, those methods are blocking and never ends... for StdOut
I was able to find a condiction (when I read "sftp>" from the buffer)
to end reading, but for StdErr? Is there a way to know how many chars
are in the buffer to use the Read(n) method which is not blocking?
Thanks!
---
Dim objFSO, objShell, objCmd
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
Set objCmd = objShell.Exec("sftp -F /home/sshuser/.ssh/ssh_config
sshuser@xxxxxx")
WScript.Echo ReadOutput(objCmd.StdOut)
objCmd.StdIn.WriteLine("pwd")
WScript.Echo ReadOutput(objCmd.StdOut)
objCmd.StdIn.WriteLine("ls")
WScript.Echo ReadOutput(objCmd.StdOut)
objCmd.StdIn.WriteLine("ls download.ok")
WScript.Echo ReadOutput(objCmd.StdOut)
WScript.Echo objCmd.StdErr.ReadAll ' <-- blocking!!!
WScript.Echo "close"
objCmd.StdIn.WriteLine("close")
Function ReadOutput(stream)
Dim strOut
Do
If Not stream.AtEndOfStream Then
strOut = strOut & stream.Read(1)
If Right(strOut, 5) = "sftp>" Then
strOut = Left(strOut, Len(strOut) - 5)
Exit Do
End If
End If
Loop
ReadOutput = strOut
End Function |