работа с командной строкой

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BOO
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 06.09.2003 (Сб) 14:23
Откуда: Саратовская обл. г.Энгельс

работа с командной строкой

Сообщение BOO » 28.10.2004 (Чт) 11:23

Тема такая:
допустим возмем команду route print
запуск командной строки я так панимаю такой:
Код: Выделить всё
shell "cmd"

Ну а как в ней уже запусить какую нибудь команду дахоть "пинг" а главное он выводит результат в стандартном окне, а как мне перехватит =считать эти данный для юзания их в проге??? :oops: :?: :x
Слушайте рок!

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 28.10.2004 (Чт) 11:37

Писал один товарищ на другом форуме:
У gbak.exe какая-то левая реализация стандартных потоков или всё-таки
консерватория?
Для регулярного бэкапа написал VB скрипт. Гибше :), возможностей побольше,
нежели в батничке, а писать на ЯВУ - несерьезно как-то :). Чтобы в окно
скрипта выводились возможные сообщения от gbak.exe использую давно
написанную и проверенную функцию, которая читает StdOut запускаемого
консольного приложения и пишет в консоль скрипта (всё играет под
CScript.exe):
Код: Выделить всё
Function Cmd(sCmd)
Dim ScriptState
    Set ScriptState = shell.Exec(sCmd)
    Do While ScriptState.Status <> 1
        WScript.Sleep 100
    Loop
    WScript.StdOut.Write(ScriptState.StdOut.ReadAll)
    Cmd = ScriptState.ExitCode
    Set ScriptState = Nothing
End Function

Соответственно, вызываю примерно так:

Result = Cmd("gbak.exe -b -user SYSDBA -password мастеркей deal.gdb
deal.gbk")

А gbak.exe упорно молчит, т.е. чего-то там пишет в свою невидимую консоль, а
мы ничего не видим. Повторяю, с любыми другими консольными программами всё
ок.

Вопрос решился тем, что вызываемая программа выбрасывала вывод не на StdOut, а на StdErr.
Разбирайся.
Удачи

BOO
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 06.09.2003 (Сб) 14:23
Откуда: Саратовская обл. г.Энгельс

спасибо

Сообщение BOO » 28.10.2004 (Чт) 13:22


Спасибо! :wink:
я тоя тут утилиту писать собрался...
Слушайте рок!

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 28.10.2004 (Чт) 13:51

А что делать будет?

BOO
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 06.09.2003 (Сб) 14:23
Откуда: Саратовская обл. г.Энгельс

Сообщение BOO » 29.10.2004 (Пт) 10:05

типа оболочка для команды route. Не ну я в курсе, что мега программы такие как файрфол, касперский имеют возможность работать с таблицами маршрутиризации, но бывает не нужно тащить такие проги, а маленькая утилита самое то. :wink:
Слушайте рок!

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Re: работа с командной строкой

Сообщение Sedge » 29.10.2004 (Пт) 10:16

BOO писал(а):Тема такая:
допустим возмем команду route print
запуск командной строки я так панимаю такой:
Код: Выделить всё
shell "cmd"

Ну а как в ней уже запусить какую нибудь команду дахоть "пинг" а главное он выводит результат в стандартном окне, а как мне перехватит =считать эти данный для юзания их в проге??? :oops: :?: :x

Вижу самое простое решение.
Создаешь bat-файл (можно и программно), в котором пишешь:
Код: Выделить всё
ping 127.0.0.1 > c:\log.txt

Запускаешь его через Shell, затем открываешь файл c:\log.txt на чтение и анализируешь, что тебе вернула команда ping

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.10.2004 (Пт) 12:29

Sedge, не вводи человека в заблуждение, через Shell ты не сможешь сделать перенаправление ввода/вывода.
Lasciate ogni speranza, voi ch'entrate.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 29.10.2004 (Пт) 12:47

alibek писал(а):Sedge, не вводи человека в заблуждение, через Shell ты не сможешь сделать перенаправление ввода/вывода.

Кто сказал? Только что это сделал. Все работает на ура ;)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.10.2004 (Пт) 12:50

Ты проверял?
Перенаправление ввода-вывода это функция не операционной системы, а интерпретатора команд (cmd.exe). И чтобы получить это перенаправление, надо чтобы эту команду исполнил интерпретатор команд, а не Shell.
Lasciate ogni speranza, voi ch'entrate.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 29.10.2004 (Пт) 12:55

alibek писал(а):Ты проверял?

Да.

alibek писал(а):Перенаправление ввода-вывода это функция не операционной системы, а интерпретатора команд (cmd.exe). И чтобы получить это перенаправление, надо чтобы эту команду исполнил интерпретатор команд, а не Shell.

Цитирую себя:
Sedge писал(а):Создаешь bat-файл (можно и программно), в котором пишешь: ...

Ты проверял? :wink: :wink: :D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.10.2004 (Пт) 12:56

Сорри, недочитал :)
Lasciate ogni speranza, voi ch'entrate.

Fillkor
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 17.08.2004 (Вт) 16:33

Сообщение Fillkor » 30.10.2004 (Сб) 20:17

народ у меня в коде shell.exec не определен, че надо какую-нибудь библиотеке подрубить


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 10

    TopList  
cron