Написал себе скрипт для интерактивной работы с QLua, возможно пригодится кому-то еще (иногда бывает нужно что-то быстро попробовать не строча полноценный скрипт). Код лежит на GitHub (хотел разместить прямо здесь, но (по крайней мене при нажатии кнопки "Просмотр") в случайных местах кода появлялись символы пробела - не понял, почему).
Для использования запускаем 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, запущеном в интерактивном режиме.
Не запускался в старой версии, обновился до 7.19.0.51, все равно не запускается. Нажимаю на Запустить и остается остановленным, в логе пусто. Проверил кодировку, запустил консоль от админа. Что то доставить надо?
PS и эту тему если вариант рабочий возможно стоит прикрепить вверху, как важную. Также неплохо бы разработчикам сделать консоль штатно - это сэкономит время не только пользователям, но и техподдержке.
qt написал: Не запускался в старой версии, обновился до 7.19.0.51, все равно не запускается. Нажимаю на Запустить и остается остановленным, в логе пусто. Проверил кодировку, запустил консоль от админа. Что то доставить надо?
Доставлять ничего не нужно. У меня Quik 7.16.3.14, скрипт работает. Сам Quik нужно запускать из командной строки, если вы так и сделали, то в чем может быть проблема я не знаю...
Старатель написал: 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). Ну, как тут помочь я не знаю...
В догонку: я так понимаю, Quik не закрывает консольные потоки ввода/вывода (иначе и под Linux/Wine бы не работало без их переоткрытия). Возможно проблема в cmd/command, и быть может поможет установка под Windows нормальной оболочки типа Bash. А может и нет...