Что нового

нет ввода в консольную программу

  • Автор темы dreamorder
  • Дата начала
D

dreamorder

Гость
Доброго времени суток гос-да.
Продолжаю мучить свой разум осваивая Autoit :smile:
Снова возникла не решаемая (для меня) задачка. Есть консольная программа, произвожу с помощью скрипта её запуск, в открытой консоли windows требуется вводить: адрес сайта, адрес электронной почты и цифры.
Всё делаю как вот в этом примере справки:

Код:
#include <Constants.au3>

Local $iPID = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

; Записывает строку для сортировки в дочерний sort.exe's Stdin.
StdinWrite($iPID, "" & @CRLF & "Слон" & @CRLF & "Яблоко" & @CRLF & "Олень" & @CRLF & "Автомобиль" & @CRLF)

; Вызов StdinWrite без второго параметра закрывает поток.
StdinWrite($iPID)

Local $sOutput = "" ; Переменная для хранения вывода StdoutRead.

; Читает из дочернего Stdout потока и вывод результата
While 1
    $sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
WEnd

MsgBox(4096, "", "Сортированная строка: " & @CRLF & $sOutput)


скрипт работает Но! в самой консоли программы ничего не пишется, т.е. нет ввода в консоль :scratch:




Добавлено:
Сообщение автоматически объединено:

Код:
; Demonstrates the use of WriteStdin
AutoItSetOption("ProvideRunStdout", 1)
AutoItSetOption("ProvideRunStdin", 1)

$foo = Run("sort.exe", @SystemDir)
; Write string to be sorted to child sort.exe's STDIN
StdinWrite($foo, "rat" & @CRLF & "cat" & @CRLF & "bat" & @CRLF)
; Calling with no 2nd arg closes
StdinWrite($foo)

; Read from child's STDOUT and show
MsgBox(0, "Debug", StdoutRead($foo))


аналогично первому примеру, скрипт работает, но ввода в консоль нет :-[


Добавлено:
Сообщение автоматически объединено:

Причём нет ввода ни на XP, ни на Vista, ни на 7ке :rofl:

Кто нибудь может подсказать причину?! :blink:
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
dreamorder [?]
Кто нибудь может подсказать причину?!
Причина, скорее всего, в том, что вы путаете понятия консолей. Ваши примеры работают с потоками ввода-вывода. Это не то же самое, что "чёрное окно" консольной программы. Стандартный поток не отображает символы в "чёрном окне". Ввод символов в окно консольной программы, как правило, осуществляется через Send.
 
Автор
D

dreamorder

Гость
InnI

Спасибо!
Не могли бы Вы не большой пример показать, как использовать
Код:
Send()
в консоль, а то у меня что то не получается :-[
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Работа с потоками лучше, ИМХО. Не мелькает и не мешает
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
dreamorder [?]
как сендить в консоль
Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Модератор.
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
DarWiM [?]
Работа с потоками лучше, ИМХО. Не мелькает и не мешает
Автор хочет увидеть символы в окне командной консоли. Возможно, это никакого отношения не имеет к потокам ввода-вывода ;)
 
Автор
D

dreamorder

Гость
madmasles Прошу прощеня, исправился :smile:



Добавлено:
Сообщение автоматически объединено:

InnI
Спасибо за пример. Это хорошо работает, но не для моей программы.
При работе программы в консоли отображается лишь название, нет класса.
И к тому же если произвести запуск нескольких копий программ, все окна консолей 100% одинаковые :blink:
 
Верх