у меня запустилось Функция из шпаргалки: ExecLua(s) выполнить из Python скрипт Lua, содержащийся в строке s Вопрос, а тут предусмотрен обмен значениями переменных? Т.е. как можно из питона передать s='Привет'
В скрипт lua:
ExecLua("print(s..' мир!' ")
Хочу увидеть:
Привет мир!
Сообщение отредактировал tonio_k - Четверг, 30.11.2023, 15:25
# Test ExecLuafrom profiles.mygui import ExecLua from profiles.myfunc import StrSave
Спасибо. Теперь понятно. Этот "импорт из шапки скрипта" надо в шпаргалке обязательно обозначить. Субъективно, если в шпаргалке в описании функции такого импорта нет, то и в голову не придёт, что что-то ещё требуется! И ещё такое специфическое...
Вот так в рамках эксперимента у меня все работает: файл hash-test 3.txt открыть в окне Демагога файл hash-test_DOFILE.txt поместить в корневую папку Demagog Запускаем выполнение скрипта питона hash-test 3.txt в окне Демагога. Выполняется код питона и в конце выполняется скрипт lua из файла hash-test_DOFILE.txt. Мне интересно, а как можно содержимое hash-test_DOFILE.txt "впихнуть" в тело скрипта hash-test 3.txt что бы работало? синтаксис Питона такая хрупкая вещь - что не пробовал - ломается Если тут все надо в одну строку прописывать, то лучше я 2 файла оставлю...
Хмм... пришло в голову: Питон в Демагоге понимает те же функции, что и Lua: WOpen() и WText(). (А так же многие другие, название которых начинается с W, например WActive(), WFilter() и т.д.) Если бы еще открыть питону доступ к функциям Демагога RexRepl() и DicRepl() то вообще к Lua не надо было бы обращаться при специализированной работе питона с текстами.
а ещё подумайте над созданием "глобальной текстовой переменной" что бы lua и питон могли эту переменную передавать Демагогу и к ней всегда могли обращаться. Что бы передача была не через файл, а через более быстрого посредника?
на счёт глобальной переменной. Я тут вспомнил, что для этих целей и создавалось окно WNew(-1, s) это универсальное решение для обмена текстом между скриптами без создания тестового файла за счёт функционала самого Демагога.
Сообщение отредактировал tonio_k - Пятница, 01.12.2023, 12:36
Согласен. "Невидимое окно" с номером -1 отлично подходит для этих целей. Осталось еще научить питон понимать RexRepl() - замены в строке именно демагоговскими регекспами - они удобнее питоновского re.replace(). Ну, и за компанию, DicRepl(). Тогда питону (так же, как и Lua) в принципе все демагоговские фишки будут доступны.
Мне интересно, а как можно содержимое hash-test_DOFILE.txt "впихнуть" в тело скрипта hash-test 3.txt что бы работало?
разобрался (спасибо, flegont, за помощь и наводку!) вот так у меня работает:
Код
import hashlib from profiles.mygui import * from profiles.myfunc import *
def get_hash_md5(filename): with open(filename, 'rb') as f: m = hashlib.md5() while True: data = f.read(8192) if not data: break m.update(data) return m.hexdigest()
# Test
a = OpenDialog(True)
s = '' for i in range(len(a)): s += a[i]+'*'+get_hash_md5(a[i])+'\n'
WNew(-1,s)
# тройные кавычки задают строку в точности, как она написана # в данном случае это небольшой скрипт на Lua # обязательно экранировать "\\" все слеши!
df = """ s = WText(-1) s = RexRepl(s, {[[^[^\\r\\n]+\\\\([^\\r\\n]+)\\*([^\\r\\n]+)::$2*$1\\r\\n]]}) WNew(-1) WNew(0,s) WActive(0) """