Показать полную графическую версию : Обмен данными между BAT-скриптами не через файл
Здравствуйте!
Имеется два скрипта, один запущен как служба, а второй должен получать от него инфу и выводить пользователю. Есть ли способ обмена информацией между ними?
Краем уха слышал, что есть много технологий типа Пайпов, Сокетов, COM и др. Но не знаю, что из этого легче реализовать батниками и куда копать.
megaloman
12-12-2021, 10:57
Имеется два скрипта, один запущен как служба, а второй должен получать от него инфу и выводить пользователю. »При такой постановке второй не нужен, пусть первый сообщает. Буквально накануне что-то похожее обсуждалось (http://forum.oszone.net/thread-350225.html). Либо первый скрипт запускает второй с данными в параметрах.
При такой постановке второй не нужен, пусть первый сообщает. Буквально накануне что-то похожее обсуждалось. Либо первый скрипт запускает второй с данными в параметрах. »
Не получится. Первый скрипт запускается от SYSTEM, а второй от локального пользователя.
Идеально было бы так: второй скрипт висит в цикле и ждет данные от первого. Получил, распарсил, выполнил команду.
DJ Mogarych
13-12-2021, 10:57
А в чём проблема для SYSTEM выводить информацию пользователю?
А в чём проблема для SYSTEM выводить информацию пользователю?
Так надо не просто выводить, а обрабатывать, и выполнять какие-либо действия на ее основе.
DJ Mogarych
13-12-2021, 13:34
Нет конкретики, так можно долго беседовать ни о чём, делая какие-то намёки на призрачную схему.
Прошу прощения, если вопрос прозвучал слишком туманно.
Вот конкретный случай, где это будет использовано:
Есть ноутбук на даче, где часто выключают свет. У ноутбука своей батареи нет, планируется подключать его к автомобильному аккумулятору через переходник 12в -> 19в. Напряжение на аккумуляторе контролируется Arduino, которая раз в 5 секунд шлет данные через COM-порт.
Скрипт, запущенный как служба, читает уровень заряда и, при его снижении ниже порога, посылает команду на гибернацию.
Стоит задача сообщить уровень заряда пользователю. Для этого при входе в систему запускается другой скрипт, который в бесконечном цикле должен получать данные от службы и выводить их в консоль.
Вот скрипт-служба:
@ ECHO OFF
MODE COM5 BAUD=9600 PARITY=n DATA=8 > nul
SET _batterylowlevel=1060
:start
FOR /F "usebackq" %%i IN (`SORT^<COM5`) DO ( SET _batterylevel=%%i)
IF %_batterylevel% lss %_batterylowlevel% (SHUTDOWN /H)
TIMEOUT /t 1 /nobreak
GOTO start
Теперь нужно придумать способ регулярно передавать значение _batterylevel в скрипт пользователя.
... (msg * %_batterylevel%& SHUTDOWN /H)
... (msg * %_batterylevel%& SHUTDOWN /H)
Так надо постоянно передавать уровень заряда, а не только в момент разрядки. Да и msg вылазит поверх всех окон, а надо в фоне, чтоб пользователь, когда ему надо, сам мог посмотреть заряд.
ioSIS, тогда Вы выбрали не тот инструмент и не тот способ. Правильный выбор — служба (service) и пользовательский UI (интерфейс).
или делать вывод в файл ... do SET _batterylevel=%%i& >>"out.txt" (echo %date%_%time%: %%i), если просто статистика нужна.
(ведь у вас же запись каждую секунду, в окне все равно ничего будет на отследить после сотни записей, я поэтому и пытался делать вывод согласно логике - только при экстренном случае)
ioSIS, тогда Вы выбрали не тот инструмент и не тот способ. Правильный выбор — служба (service) и пользовательский UI (интерфейс). »
Ну, "служба" у меня уже есть. Осталось придумать к ней UI. CMD выбрал, т.к. посчитал, что это самый быстрый способ реализации.
или делать вывод в файл ... do SET _batterylevel=%%i& >>"out.txt" (echo %date%_%time%: %%i), если просто статистика нужна.
(ведь у вас же запись каждую секунду, в окне все равно ничего будет на отследить после сотни записей, я поэтому и пытался делать вывод согласно логике - только при экстренном случае)»
А все отслеживать не надо, достаточно знать последнее значение, чтоб прикинуть, сколько ещё времени работы осталось.
Обмен данными через файл возможен и очевиден, но хотелось бы именно "безфайловый" метод. Почему? Для расширения кругозора и освоения всех возможностей системы.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.