1

Тема: VBS Запуск внешнего приложения с парматрами

Добрый день.

Требуется выполнить консольное приложение с ключами и вывод направить в переменную.

Например: нужно запустить из vbs-ка git.exe status -s и вывод направить в переменную Status, что бы затем с ней работать.


Dim WshShell, Status   ' Объявляем переменные

' Создаем объект WshShell

Set WshShell = WScript.CreateObject("WScript.Shell")

' Запускаем утилиту git.exe с ключом "status -s" и ожидаем окончания ее работы

WshShell.Run("git.exe ststus -s",1,true)

Как сделать вывод в файл я знаю, а как в переменную не могу догадаться.

2 (изменено: wisgest, 2013-06-24 16:34:12)

Re: VBS Запуск внешнего приложения с парматрами

Если объём вывода не слишком огромный, можно обойтись

Status = WshShell.Exec("git.exe ststus -s").StdOut.ReadAll();

3

Re: VBS Запуск внешнего приложения с парматрами

wisgest пишет:

Если объём вывода не слишком огромный, можно обойтись

Status = WshShell.Exec("git.exe ststus -s").StdOut.ReadAll();

Я думаю не более 20-30 строк.

4

Re: VBS Запуск внешнего приложения с парматрами

wisgest, а ежели приложение не успеет сделать вывод?

5

Re: VBS Запуск внешнего приложения с парматрами

ReadAll() — не всё что успело вывести приложение, а ожидает пока не будет закрыт выходной поток, поэтому так легко зависнуть, если приложение само будет ожидать ввода.

Set WshShell = CreateObject("WScript.Shell")
MsgBox WshShell.Exec("cmd.exe /c pause<con").StdOut.ReadAll()

6

Re: VBS Запуск внешнего приложения с парматрами

Ну, что ж, тогда это хорошо.

7

Re: VBS Запуск внешнего приложения с парматрами

wisgest пишет:

ReadAll() — не всё что успело вывести приложение, а ожидает пока не будет закрыт выходной поток, поэтому так легко зависнуть, если приложение само будет ожидать ввода.

Set WshShell = CreateObject("WScript.Shell")
MsgBox WshShell.Exec("cmd.exe /c pause<con").StdOut.ReadAll()

Я немножко запутался. Данная конструкция отрабатывает отлично:


Dim WshShell, Status

Set WshShell = WScript.CreateObject("WScript.Shell")

Status = WshShell.Exec("git.exe --help").StdOut.ReadAll()

WScript.Echo Status

В чем может возникнуть проблема с вводом\выводом?

у git'a команда status с флагом -s (или другими) работает только на вывод, входного потока она ждать точно не будет.

8

Re: VBS Запуск внешнего приложения с парматрами

pacman_sa пишет:

Я думаю не более 20-30 строк.

pacman_sa пишет:

В чем может возникнуть проблема с вводом\выводом?

у git'a команда status с флагом -s (или другими) работает только на вывод, входного потока она ждать точно не будет.

В этом случае проблемы не должны возникнуть.

9

Re: VBS Запуск внешнего приложения с парматрами

В чем может возникнуть проблема с вводом\выводом?

Hang When Reading StdErr/StdOut Properties of WshScriptExec Object

10

Re: VBS Запуск внешнего приложения с парматрами

Всем огромное Спасибо!