без сохранения вывода во временный файл на диске
конкретно:
запускаем прогу методом Run():
shell.Run ("%comspec% /c echo Hello world", 0, true);
как получить строку hello world без сохранения вывода в промежуточном файле?
Сабж возможен? ни гугля, ни яндекс не разумеют...
Перехватить вывод консольной проги на WSH...
Модератор: Duncon
Мда... зато MSDN рулит. Отвечаю сам себе - объект WshScriptExec спасет всех отцов русской демократии с такой же проблемой...
Пример скрипта
Пример скрипта
VBScript писал(а): Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("%comspec% /c dire")
Function ReadAllFromAny(oExec)
If Not oExec.StdOut.AtEndOfStream Then
ReadAllFromAny = oExec.StdOut.ReadAll
Exit Function
End If
If Not oExec.StdErr.AtEndOfStream Then
ReadAllFromAny = oExec.StdErr.ReadAll
Exit Function
End If
ReadAllFromAny = -1
End Function
Dim allInput, tryCount
allInput = ""
tryCount = 0
Do While True
Dim input
input = ReadAllFromAny(oExec)
If -1 = input Then
If tryCount > 10 And oExec.Status = 1 Then
Exit Do
End If
tryCount = tryCount + 1
WScript.Sleep 100
Else
allInput = allInput & input
tryCount = 0
End If
Loop
If oExec.ExitCode <> 0 Then
WScript.Echo "Warning: Non-zero exit code"
End If
WScript.Echo allInput
JScript писал(а): var WshShell = new ActiveXObject("WScript.Shell")]
Еще вопрос - как в этом случае избавиться от консольного окошка запускаемой программы - т.е. скрыть, чтобы пользователь не видел его. А сейчас оно выскакивает на секунду и тут же скрывается.
Как обычно, отвечаю сам себе (тихо сам с собою...)Fktrc писал(а):Еще вопрос - как в этом случае избавиться от консольного окошка запускаемой программы - т.е. скрыть, чтобы пользователь не видел его. А сейчас оно выскакивает на секунду и тут же скрывается.
С помощью главного скрипта запускаем перехватывающий скрипт (script.js) в консольном режиме посредством cscript.exe. Cscript.exe перехватывает вывод консольной проги, запущенной методом Exec. А с помощью главного скрипта мы скрываем окно cscript.exe - вуаля! Вывод прочитан, а сторонняя программа на экран не выскакивает. А чтобы получить то, что прочли, перехваченный вывод загоняем в переменную окружения с именем EXAMPLE (никто не запрещает дать ей другое имя) и в главном скрипте читаем эту переменную и делаем с ней что угодно.
Использованные скрипты:
Основной запускаемый скрипт:
var WshShell = new ActiveXObject("WScript.Shell")]
script.js писал(а):var WshShell = new ActiveXObject("WScript.Shell")]
Перехватывающий скрипт взят из MSDN;
Успехов всем.