Snusmumriken
КТО БЫ МОГ ПОДУМАТЬ )))0
Mad
Что тут у вас в луа вообще происходит?
Mad
КТО БЫ МОГ ПОДУМАТЬ )))0
так я тоже самое вставил
Snusmumriken
То же самое это что? То что ты скинул или то что я скинул?
Mad
так, спасибо большое, я прям понять не мог как так, теперь буду пытаться понять ПОЧЕМУ это работает
Snusmumriken
Хорошо. Работает по очевидным причинам, потому что mpv перезапускает функцию.
Mad
Снова не работает
Mad
Снова не работает
потому-что я поменял 1 на 0.001 секунду
Snusmumriken
Посмотри когда вызываются события. Добавь print'ов.
Mad
если бы я только знал, как работает интерпретатор луа
Mad
Все что меньше 1 - не работает
Snusmumriken
Интерпретатор луа работает как обычно. Вопрос только как работает mpv.
Snusmumriken
Только сам mpv желательно полностью перезапускать, чтобы чистились потенциальные хвосты.
Mad
Интерпретатор луа работает как обычно. Вопрос только как работает mpv.
Впрочем ладно, на 1 работает Правда все еще не понятно как и почему, но результатом я доволен :)
Snusmumriken
А что не понятно? Почему mpv запускает функцию? Ну так мы же добавили её в таймер на запуск условно каждую секунду, вот mpv её и перезапускает.
Mad
Погодите-ка
Snusmumriken
Внутри mpv сидит цикл, который такой гоняет то на что ты его запрогал, например ты добавил таймер — он его запомнил и запускает.
Mad
Погодите-ка
я почистил printы, поменял все на табы и опять все сломалось
Snusmumriken
Чекни, поковыряй.
Mad
Теперь выходить можно только через echo quit > ars, через mpv - нельзя.
Snusmumriken
В чём разница?
Mad
В чём разница?
без понятия
Mad
mp.register_event("shutdown", function() timer:kill() end) не помогает, хотя должен
Snusmumriken
А ты добавь туда print, чтобы посмотреть, выполняется он или нет. С другой стороны, даже если он и не выполняется, mpv должно нормально закрыться, и просто перестать запускать всю фигню, так что даже register_event не должен быть нужен.
Mad
Может плагин на джаваскрипте написать? Там как раз асинк прямо в языке
Snusmumriken
Лол, нет там асинка в языке.
Snusmumriken
Будет всё буквально то же самое. Буквально ))
Snusmumriken
И влепив while ты добьёшься того же результата.
Mad
Лол, нет там асинка в языке.
не асинк, просто выполняется все непоследовательно, но я не эксперт
Snusmumriken
Карочи, разницы не будет, инфа сотка. Щяс ещё подумаю.
Snusmumriken
Попробуй подчистить все хвосты разом function fifo() print("ars") fifo_file = io.open("ars", "r") content = fifo_file:read("*all") fifo_file:close() return content end timer = mp.add_periodic_timer(1, fifo) cleanup = function() timer:kill() mp.unregister_event(cleanup) end mp.register_event("shutdown", cleanup)
Mad
Попробуй подчистить все хвосты разом function fifo() print("ars") fifo_file = io.open("ars", "r") content = fifo_file:read("*all") fifo_file:close() return content end timer = mp.add_periodic_timer(1, fifo) cleanup = function() timer:kill() mp.unregister_event(cleanup) end mp.register_event("shutdown", cleanup)
Теперь вообще ничего не работает, и выйти нельзя ни через echo quit > ars (конечно, тут же нет mp.command), ни через просто выход mpv. shutdown уже понятно, использовать бесполезно, он просто никак не работает
Snusmumriken
Оки, мб баги mpv )
Snusmumriken
Я таки под вендой, и линуксовые машинки у меня даже без DE, так что проверять вручную сложновато, всё на уровне телепатов в отпуске.
Mad
Я таки под вендой, и линуксовые машинки у меня даже без DE, так что проверять вручную сложновато, всё на уровне телепатов в отпуске.
мне сейчас вообще все равно как, потому-что я никак не могу понять что не так, видимо надо писать ишью
Snusmumriken
А он что-то говорит на попытки выхода? И сама модель запуска команд работает?
Mad
А он что-то говорит на попытки выхода? И сама модель запуска команд работает?
на попытке выхода он просто застывает, и все что остается работать это какой-то mpv-core (потому-что из терминала можно duple Ctrl+C сделать и он принудительно умрет) и собственно наш придурок, который не останавливается даже от quit, не то что shutdown
Mad
echo quit > ars вроде как работал потому-что он успевал выйти в тот самый секундный перерыв
Snusmumriken
Так, смотри. Оно каждую секунду выполняет содержимое файла.
Snusmumriken
Что у тебя там в файле?
Igor
Если я правильно понял, ты хочешь сделать, чтбы выходило из проигрывания как только в ars появляется слово quit. Если так, то вот.
Igor
Только что проверил, работает
Igor
Но если в файле есть что-то ещё, надо будет писать echo quit >> ars
Igor
чтобы он его дополнил
Snusmumriken
Возможно в файле ars бешеное количество команд.
Igor
ну можно ещё while внутри прикрутить
Igor
и желательно очистку файла перед запуском таймера плеера
Snusmumriken
Потому что файл не удаляется при выполнении. io.open("ars", "w"):close() — это очистка файла. Выполняй каждый раз после чтения.
Mad
Что у тебя там в файле?
файл fifo, вписываю туда значение через echo, какой-то ридер его кушает (да хоть cat), и выполняет это. Так как это fifo - они друг друга ждут, когда заполняешь с помощью echo он ждет пока его скушают, а когда его пытаются съесть - дожидаются как я его заполню echo
Mad
файл абсолютно пустой
причем всегда, это только буфер, т.е. мост
Mad
Если я правильно понял, ты хочешь сделать, чтбы выходило из проигрывания как только в ars появляется слово quit. Если так, то вот.
Оно никак не может работать, он же делает тоже самое, только единственное проверяет вывод. Сам выход через quit > ars может и работает, только вот через обычный выход mpv оно не может
Snusmumriken
Оно никак не может работать, он же делает тоже самое, только единственное проверяет вывод. Сам выход через quit > ars может и работает, только вот через обычный выход mpv оно не может
Кстати, было бы неплохо добавить проверки и выполнение команд по списку, с очисткой файла после выполнения всех команд. filename = "ars" function fifo() print("ars") local file = io.open(filename, "r") -- файла может не быть if not file then return end file:close() -- читаем все команды в файле построчно и выполняем по очереди local somethingExecuted = false for line in io.lines(filename) do if line and #line > 0 do mp.command(line) somethingExecuted = true end end -- очистка файла, мы выполнили все команды if somethingExecuted then io.open(filename, "w"):close() end end timer = mp.add_periodic_timer(1, fifo) cleanup = function() timer:kill() mp.unregister_event(cleanup) end mp.register_event("shutdown", cleanup)
Mad
И правда, сейчас проверю, спасибо Но мне все-таки кажется, что это только на винде, но проверю
Igor
Ну у меня есть на бубунте ноут, но за ним далеко тянуться, плюс я там mpv вроде не ставил
Igor
Но думаю и там бы работало
Snusmumriken
Пора обновлять софт )
Snusmumriken
Ну и делать по-человечески, с проверками валидности происходящего.
Mad
Если я правильно понял, ты хочешь сделать, чтбы выходило из проигрывания как только в ars появляется слово quit. Если так, то вот.
Работает. И правда. Только вот если это fifo - он замирает прямо на старте, т.е. это совсем не то что мне нужно
Snusmumriken
Что ты имеешь ввиду под fifo?
Igor
Так fifo блокирующий, логично
Snusmumriken
Типа, вписываешь в файл сразу кучу команд и хочешь выполнить их все по очереди добавления?
Mad
Так fifo блокирующий, логично
так в этом и проблема, этого никак не избежать?
Igor
создаёт fifo файл
Mad
Что ты имеешь ввиду под fifo?
> файл fifo, вписываю туда значение через echo, какой-то ридер его кушает (да хоть cat), и выполняет это. Так как это fifo - они друг друга ждут, когда заполняешь с помощью echo он ждет пока его скушают, а когда его пытаются съесть - дожидаются как я его заполню echo
Igor
так в этом и проблема, этого никак не избежать?
а тебе именно fifo пайп нужен? можно же обычным файлом
Igor
ни у Lua, ни у JS нет нужного api внутри mpv для неблокирующего чтения
Snusmumriken
В чём проблема считывать и чистить?
Igor
В чём проблема считывать и чистить?
Там не в этом проблема. Если это fifo файл и в нём недостаточно данных, то read блокируется и ждёт их.
Mad
а тебе именно fifo пайп нужен? можно же обычным файлом
1. Как же классно, когда твоя программа сканирует файл каждую секунду 2. Если я направлю поток команд - то они все адекватно интерпретируются, друг за другом, все, это же все таки First In First Out
Snusmumriken
Скан файла каждую секунду это незначительно. Хуже если сканировать его 9000000 раз в секунду как это было в начале )