1 (изменено: mozers, 2017-04-11 21:17:44)

Тема: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Как выводить сообщения в консоль? В других языках есть Echo, Debug.Print и т.п., а тут?

Такой команды нет, но её легко сделать самостоятельно, достаточно в папке AutoHotkey\Lib создать файл с именем echo.ahk такого содержания:

Echo(txt=""){
	FileAppend %txt%`n, *
}

Теперь в любом своём скрипте вы можете писать, например, так:

WinGet, id, list,,, Program Manager
Loop, %id%
{
	this_id := id%A_Index%
	WinGetClass, this_class, ahk_id %this_id%
	WinGetTitle, this_title, ahk_id %this_id%
	Echo(A_Index "`n  Class:" this_class "`n  Title:" this_title)
}

Или использовать данную команду для контроля работы Вашего скрипта:

echo("Line: " A_LineNumber "  ErrorLevel: " ErrorLevel "  MyCurrentValue: " val)

2

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Тема не совсем для новичков, стоит создать отдельную тему в Коллекции. Перенёс пока сюда для обсуждения.

3

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Интересует почему речь идёт о консоли, в то время как скрипт записывает данные в файл? Может нужно создать окно, отображающее события в реальном времени? Либо озаглавить тему как журнал (протокол) работы скрипта?

4 (изменено: stealzy, 2017-04-09 14:07:24)

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

mozers, вы каждый свой велосипедо-чих собираетесь сюда постить?
Если бы вы поискали, то обнаружили бы, что для вывода в StdOut есть библиотеки. Это обычно используется для interop с другими консольными программами.
Для отладки проще использовать OutputDebug.

контролировать работу скрипта не прерывая его выполнения

ListVars, нет?
Про время, которое занимает запись в файл, даже говорить не хочется.
Я бы переименовал тему в "Вредные советы".
UPD:
Из недавно виденного: OSD Console / Log.

5 (изменено: mozers, 2017-04-09 15:59:03)

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

stealzy пишет:

mozers, вы каждый свой велосипедо-чих собираетесь сюда постить?

Именно так. Если считаю это интересным и полезным.

stealzy пишет:

проще использовать OutputDebug.

Проще??? Чем?
И вообще, OutputDebug - это совсем не Echo, который выводит не только при ошибках.

ypppu пишет:

Тема не совсем для новичков, стоит создать отдельную тему в Коллекции

Не согласен. Наверное Вы уже забыли как начиналось первое знакомство с AHK:
- Копирую скрипт в SciTE, нажимаю F5.
- Ой, где вывод? Значок AHK появился в трее и все.
- А... дошло. Надо еще заданную комбинацию клавиш нажать чтоб заработало.
- Наконец, сработало. Вылетел долбанный MsgBox с инфой.
- Теперь, чтобы продолжить, мне надо кликнуть на MsgBox, потом найти в трее значок AHK и закрыть его... Пипец какой то.
Через неделю доходит что шоркат для отладки лучше убрать - тогда скрипт запустится сразу, выполнит действо и завершит работу. Совсем как в других нормальных языках.
Вот только вставка в проблемные места кода MsgBox бесит так же как бесила в VBS. Но в VBS есть WSript.Echo, а в AHK консольную альтернативу MsgBox я искал долго и упорно. Попадались лишь глюкавые монстроидальные решения (типа такого, что предложил stealzy). И вот, наконец, нашел! Просто и эффективно.

Название темы поменял. Отладка - лишь частный случай использования Echo.

6

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

mozers
Ненормативное слово заменено. Прошу придерживаться пп. 2.2.

7

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Коллеги, вы не поняли. Вывод идёт ни в какой не в файл, а в поток вывода StdOut. Его содержание можно увидеть, если запустить скрипт через SciTE и посмотреть в её консоль. mozers, но мне не совсем понятно, в чём, собственно, идея? То что вы оформили команду

FileAppend %txt%`n, *

в виде функции?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

8 (изменено: stealzy, 2017-04-09 17:21:30)

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Интересно у вас знакомства проходят, что я могу сказать . Кстати, чтобы не блокировать исполнение, есть замечательная команда ToolTip.

mozers пишет:

И вообще, OutputDebug - это совсем не Echo, который выводит не только при ошибках.

Сразу видно товарища, который "не видел, но осуждаю". Почитайте справку что-ли, не позорьтесь. Могли бы и по названию команды догадаться.
Я буквально вчера отлаживал функцию поиска пикселя, которая проходит циклом почти 2 ляма итераций, на каждую итерацию я получал запись в лог дебаггера;
даже не представляю, сколько времени это заняло бы, если бы каждая итерация сопровождалась бы открытием файла, записью, закрытием файла.

Просто интересно: вы смотрите файл в редакторе, который отображает изменения в нем немедленно и без вопросов? Полагаю, что нет. А после отрабатывания скрипта для очистки лога вы его удаляете?

И заметьте, я предложил вам также вывод в StdOut, а ссылка в UPD - просто пример велосипеда, который не стыдно опубликовать на форуме.
Просто поскольку большинство ahk скриптов запускаются не через консоль, то гораздо удобнее использовать gui дебаггер.

mozers пишет:

Совсем как в других нормальных языках.

Ok.

teadrinker, в том-то и дело, что товарищ хотел вывод в StdOut, вместо использования готовых ф-ий для этого (а я находил и сохранил себе не один вариант) придумал запись в файл и решил поделиться "историей успеха". Остается надеяться никто из новичков не станет это использовать.

9

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

А где там запись в файл?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

10

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Я про FileAppend.

mozers пишет:

Название темы поменял.

mozers пишет:

AHK: Консольная альтернатива MsgBox

Вы вообще в курсе как консоль выглядит ?

11 (изменено: ypppu, 2017-04-09 17:35:29)

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

mozers, не, когда я был совсем новичком, то не знал про SciTE и редактировал скрипты в Блокноте. Позже я узнал про SciTE, но решил, что мои скрипты не очень сложные, и спецпрограммы мне пока не нужны. Поэтому до сих пор редактирую в Блокноте. А если нужно отследить содержимое переменной, вставляю в код MsgBox.

Я не против выложить эту штуку в раздел для новичков, только под более понятным заголовком.

12

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

stealzy
Ну если мы в терминах теряемся, то поможет Википедия:

В различных программах и играх консолью стали называть окно для вывода системных сообщений и приёма команд (см.: интерфейс командной строки).
Консолью называют программное обеспечение, реализующее текстовый интерфейс.

13

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

ypppu,
А если, допустим, надо вывести десяток строк (временно), это надо 10 раз на MsgBox нажать? А, не дай Бог, с какой нить выводимой строки текст скопировать понадобиться?
Конечно, можно и без консоли жить. Но тот кто попробовал - ни за что не откажется. И за Блокнот никогда в жизни уже не сядет.

14

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

mozers, можно в GUI выводить, дело вкуса. Но мне это пока просто не требовалось.

Если помещать в тему для новичков, то с объяснением: что такое "консоль" в контексте StdOut и текстовых редакторов вроде SciTE.

15

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Объяснение??? Подумаю...
Просто мне казалось естественным для тех, кто не имеет редакторов со встроенной консолью, запускать скрипты (не только АНК, а любые) с командной строки и изучать их вывод в стандартной виндовой консоли.
Отладка любого скрипта без консоли мне представляется работой с закрытыми глазами.
А SciTE просто эмулирует стандартную виндовую консоль (которую некоторые еще по-старинке неверно называют "Окном DOS") в одной из своих панелей.

можно в GUI выводить

Можно все. Но зачем, когда есть замечательная и непревзойдённая консоль?

16

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

На то они и новички. В раздел AutoHotkey часто приходится объяснять то, что кажется очевидным.

17 (изменено: mozers, 2017-04-09 20:02:26)

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

ypppu
Перечитал топик сверху вниз. Подумал. Да, объяснять что такое StdOut и консоль, видимо, придётся. И, увы, не только для новичков.

stealzy пишет:

Сразу видно товарища, который "не видел, но осуждаю". Почитайте справку что-ли, не позорьтесь.

А вы сами то читали справку? Да? И все поняли? И что такая команда выведет в стандартной консоли?

OutputDebug, "Hello Word!"

Если не понял почему пусто - еще раз в справку. А теперь попробуйте мою

Echo("Hello Word!")
teadrinker пишет:

но мне не совсем понятно, в чём, собственно, идея?

Да никакой особенной идеи нет. Просто я в этом жутко нуждался. Полагаю такую нужду испытывают все, кто писал на других скриптовых языках. А AHK-шники, как оказалось, и в большинстве своем и не знают о таком простом и чудесном инструменте как консоль. Если возникает проблема - сразу принимаются навешивать дебаггеры и пр...

18

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Просто я в этом жутко нуждался

Ну, если бы я не знал, что такое консоль, я бы организовал аналогичный вывод в GUI без всякого StdOut.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

19

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

mozers, OutputDebug ничего не выводит в консоли, если вы все еще не открывали справку :

Sends a string to the debugger (if any) for display.

Прямо в справке есть ссылка на свободный полумегабайтный портативный дебаггер.
Мой же комментарий касался вашего заблуждения, что эта команда выводит некие сообщения и только при ошибках(?).
Команда OutputDebug специально предназначена для отладки, и я могу написать целую страницу текста, чем отладка в дебаггере лучше StdOut, но готов поспорить, вы даже не попытались эту команду использовать.

Но если вы так хотите консоль, неплохо бы вам осилить подключение библиотеки для вывода в StdOut, а не выдавать текстовый файл за консоль.

mozers пишет:

Просто мне казалось естественным для тех, кто не имеет редакторов со встроенной консолью, запускать скрипты (не только АНК, а любые) с командной строки и изучать их вывод в стандартной виндовой консоли.

Если бы вы так и сделали, у меня вопросов бы не возникло.

20 (изменено: mozers, 2017-04-09 21:48:50)

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

stealzy
Я чувствую намёков вы не понимаете. Тогда - без намеков:
1. Echo выводит в StdOut (а не в файл, как вы утверждаете).
2. OutputDebug выводит в окно дебаггера. (Который ещё надо скачать и установить).
3. Если консоль - встроенная (как у меня в SciTE), то грех не воспользоваться такими возможностями. Тут и быстрый переход от сообщения с ошибкой к строке, которая её вызвала. И возможность вывода в ту же консоль любых отладочных сообщений (с помощью того же Echo). И еще туча всяких удобств, реализованных скриптами (вывод которых идет в ту же консоль).
Дебаггер у меня тоже стоит но я его практически использую - консоли в 99% случаев с лихвой хватает.
Остальной поток сознания даже комментировать не хочется.

21

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Признаю свою ошибку насчет FileAppend, считал что запись происходит в файл.

mozers пишет:

Который ещё надо скачать и установить

stealzy пишет:

полумегабайтный портативный дебаггер

.

22

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

stealzy пишет:

Команда OutputDebug специально предназначена для отладки, и я могу написать целую страницу текста, чем отладка в дебаггере лучше StdOut

А, правда, если связно будет написано, то я бы с удовольствием прочёл. (Без всякой иронии.)

23

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

mozers, зря Вы так. Рассуждаете действительно, будто даже не притронулись к предложениям по теме, которую сами же и подняли.

Довольно удобная софтина со всеми причитающимися. В связке с предложением stealzy, очень практично. Если ещё не встречались, попробуйте. Ваши требования должна удовлетворить.

24

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

KusochekDobra
Да поймите, я же не против дебаггеров! Дебаггер - специализированная программа, предназначенная для отладки приложений. Консоль - это лишь средство отображения текстовой информации.
Сравнивать их с точки зрения отладки кода - глупо и бессмысленно! Нельзя дебаггер предпочесть консоли. Это совершенно разные вещи! И говорить "Зачем мне консоль - у меня стоит дебаггер" так же глупо, как заявлять "Зачем мне знать команды ОС, если я в совершенстве знаю AHK".
Я говорю о том, что консоль (стандартную и встроенную в редактор) зачастую очень удобно использовать для вывода текста или для простейшей диагностики.
Простейший пример из справки:

WinGet, id, list,,, Program Manager
Loop, %id%
{
	this_id := id%A_Index%
	WinGetClass, this_class, ahk_id %this_id%
	WinGetTitle, this_title, ahk_id %this_id%
	Echo(A_Index "`n  Class:" this_class "`n  Title:" this_title)
}

Конечно, можно поставить вместо Echo MsgBox и тыкать кнопки, можно сделать вывод в ListView, ToolTip, Menu наконец. Можно еще как то измудриться и изобретать велосипед, но зачем, когда вам дан такой отличнейший и удобнейший инструмент как консоль.
Не игнорируйте, пользуйтесь на здоровье!

P.S. Я - в диком шоке от этих диалогов. Советую всем хоть на чуть чуть отвлечься от AHK и чего нибудь по-сочинять на любом другом скриптовом языке. Ну хотя бы командные файлы. Чтобы хоть консоль вживую увидеть...

25

Re: AHK: Вывод сообщений в консоль (аналог Echo, Debug.Print и т.п.)

Вполне понятно, что при своей некоторой функциональной схожести, у них есть явные различия, иначе это был бы один инструмент. Но при всей ощущаемой грамотности Ваших описательных моментов этого обсуждения, суть, отражаемую названием темы и то, с чего был взят старт, Вы, не раскрываете. Весьма сомневаюсь, что все ответы настолько некомпетентны в своём мнении, что нежизнеспособны в контексте понимания поставленной задачи, или являются попытками Вас потроллить - не то место, да и не та публика. А старание уловить нить момента истины, увы, мы, по ходу все провалили. Ведь Вы, судя по всему, стараетесь познакомить нас, или самых заинтересованных из нас, с каким-то своим видением ситуации, в перспективе, приближающем к большему комфорту в процессе творчества, но посвящаете нас в это так пространственно и без указания фокуса, что интерес к предмету Вашего восхищения улавливается лишь в самом стремлении это донести. Поэтому, вместо ожидаемого понимания, Вы находите только попытку участия и ведёте себя так, будто вокруг близорукие глупцы.

Так и вижу себя в Ваших глазах в образе обезьяны за рулём в час пик. Но если я обезьяна, тогда разговаривайте со мной по обезьяньи. В противном случае, Вы пишете себе - публике, в лице единственного человека. Тогда дискуссия с Вами будет вряд ли возможна, а будущие темы созданные от Вашей руки, будут нести отпечаток этой беседы для всех её участников и свидетелей.

Поэтому, если запал ещё горит, а начатая мысль не даёт покоя, внесите больше конкретики в обсуждение. А считать людей неспособными к пониманию пока не доказано обратное - не поможет навести мосты, особенно, если к этому пониманию ведёте Вы, не сильно стараясь показать дорогу.