Написал себе скрипт для интерактивной работы с QLua, возможно пригодится кому-то еще (иногда бывает нужно что-то быстро попробовать не строча полноценный скрипт). Код лежит на (хотел разместить прямо здесь, но (по крайней мене при нажатии кнопки "Просмотр") в случайных местах кода появлялись символы пробела - не понял, почему).
Для использования запускаем Quik из командной строки. То есть открываем окошко для ввода команд, пишем:
Далее из Quik запускаем qlua-console.lua, в терминале появляется приглашение для ввода. Можно исполнять любой код Lua, вызывать функции QLua и определять callbacks. Дополнительно доступна функция qluaDump(...) - возвращает строковое представление переданных аргументов. Например:
Для остановки callback присваиваем ему nil (бесстрашно вводим код пока в терминале продолжается выхлоп от OnParam - в реале, конечно, нужно в файл выводить):
Код
qlua> OnPa ram = nil
qlua>
(выхлоп прекращается). Ну и т.д.
Для завершения работы набираем "quit":
Код
qlua> quit
qlua terminated
Если вдруг по привычке нажмете кнопку "Остановить", то нужно будет в терминале нажать <Enter>, чтобы main() вышла из io.stdin:read() (не нашел изящного способа это побороть, не прибегая к внешним библиотекам).
Следует заметить, что локальные переменные видны только до следующего qlua> (они локальны внутри chunk), поэтому
Код
qlua> local v = 5
qlua> print(v)
nil
qlua>
Но:
Код
qlua> local v = 5; print(v)
5
qlua> do
2> local v = 5
3> print(v)
4> end
5
qlua>
Все как и в обычном интерпретаторе Lua, запущеном в интерактивном режиме.
Ага, вот такие вот пробелы и появляются - почему?! :(
Пользователь
Сообщений: Регистрация: 23.01.2015
29.12.2017 04:40:26
Код
qlua> OnPa ram = nil
qlua>
Пользователь
Сообщений: Регистрация: 23.01.2015
29.12.2017 04:41:16
kroki, Действительно появляется пробел. Спасибо за обращение Будем разбираться.
Пользователь
Сообщений: Регистрация: 11.02.2017
06.01.2018 21:26:04
Спасибо, ценный скрипт.
Пользователь
Сообщений: Регистрация: 18.07.2018
06.12.2018 12:12:26
Не запускался в старой версии, обновился до 7.19.0.51, все равно не запускается. Нажимаю на Запустить и остается остановленным, в логе пусто. Проверил кодировку, запустил консоль от админа. Что то доставить надо?
PS и эту тему если вариант рабочий возможно стоит прикрепить вверху, как важную. Также неплохо бы разработчикам сделать консоль штатно - это сэкономит время не только пользователям, но и техподдержке.
Пользователь
Сообщений: Регистрация: 14.12.2017
06.12.2018 14:55:20
Цитата
qt написал: Не запускался в старой версии, обновился до 7.19.0.51, все равно не запускается. Нажимаю на Запустить и остается остановленным, в логе пусто. Проверил кодировку, запустил консоль от админа. Что то доставить надо?
Доставлять ничего не нужно. У меня Quik 7.16.3.14, скрипт работает. Сам Quik нужно запускать из командной строки, если вы так и сделали, то в чем может быть проблема я не знаю...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.12.2018 02:49:35
QUIK 7.23.1.4 Скрипт-то запускается, но сразу же останавливается. cwrite ничего не кажет. Выходит по условию
Код
if stop or c == nil or string_match(c, "^%s*quit%s*$") then
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 14.12.2017
09.12.2018 15:40:20
Цитата
Старатель написал: QUIK 7.23.1.4 Скрипт-то запускается, но сразу же останавливается. cwrite ничего не кажет. Выходит по условию
Код
if stop or c = = nil or string_match(c, "^%s*quit%s*$" ) then
Да, вы правы. Под Wine под Linux все работает (пробовал 7.14, 7.16, 7.23), но сейчас попробовал под настоящей виндой в VirtualBox - под Windows в QLua не работает даже такой простой скрипт:
Код
assert(io.write("io.write()\n"))
local r = io.read()
error("io.read() returned "..tostring(r))
io.write() ничего не выводит (хотя и не выдает ошибку), io.read() ничего не читает и возвращает nil (пробовал и под cmd, и под command). Ну, как тут помочь я не знаю...
Пользователь
Сообщений: Регистрация: 14.12.2017
09.12.2018 15:52:58
В догонку: я так понимаю, Quik не закрывает консольные потоки ввода/вывода (иначе и под Linux/Wine бы не работало без их переоткрытия). Возможно проблема в cmd/command, и быть может поможет установка под Windows нормальной оболочки типа Bash. А может и нет...