Перехватить вывод консольной проги на WSH...

Обсуждение вопросов клиентского программирования.

Модератор: Duncon

Ответить
Fktrc
Сообщения: 40
Зарегистрирован: 20 фев 2004, 11:22
Откуда: Кемерово
Контактная информация:

без сохранения вывода во временный файл на диске

конкретно:
запускаем прогу методом Run():
shell.Run ("%comspec% /c echo Hello world", 0, true);
как получить строку hello world без сохранения вывода в промежуточном файле?

Сабж возможен? ни гугля, ни яндекс не разумеют...
Fktrc
Сообщения: 40
Зарегистрирован: 20 фев 2004, 11:22
Откуда: Кемерово
Контактная информация:

Мда... зато 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
Сообщения: 40
Зарегистрирован: 20 фев 2004, 11:22
Откуда: Кемерово
Контактная информация:

Еще вопрос - как в этом случае избавиться от консольного окошка запускаемой программы - т.е. скрыть, чтобы пользователь не видел его. А сейчас оно выскакивает на секунду и тут же скрывается.
Fktrc
Сообщения: 40
Зарегистрирован: 20 фев 2004, 11:22
Откуда: Кемерово
Контактная информация:

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;
Успехов всем.
Ответить