Войти

Показать полную графическую версию : Обмен данными между BAT-скриптами не через файл


ioSIS
12-12-2021, 01:47
Здравствуйте!
Имеется два скрипта, один запущен как служба, а второй должен получать от него инфу и выводить пользователю. Есть ли способ обмена информацией между ними?

Краем уха слышал, что есть много технологий типа Пайпов, Сокетов, COM и др. Но не знаю, что из этого легче реализовать батниками и куда копать.

megaloman
12-12-2021, 10:57
Имеется два скрипта, один запущен как служба, а второй должен получать от него инфу и выводить пользователю. »При такой постановке второй не нужен, пусть первый сообщает. Буквально накануне что-то похожее обсуждалось (http://forum.oszone.net/thread-350225.html). Либо первый скрипт запускает второй с данными в параметрах.

ioSIS
13-12-2021, 00:47
При такой постановке второй не нужен, пусть первый сообщает. Буквально накануне что-то похожее обсуждалось. Либо первый скрипт запускает второй с данными в параметрах. »

Не получится. Первый скрипт запускается от SYSTEM, а второй от локального пользователя.
Идеально было бы так: второй скрипт висит в цикле и ждет данные от первого. Получил, распарсил, выполнил команду.

DJ Mogarych
13-12-2021, 10:57
А в чём проблема для SYSTEM выводить информацию пользователю?

ioSIS
13-12-2021, 11:01
А в чём проблема для SYSTEM выводить информацию пользователю?

Так надо не просто выводить, а обрабатывать, и выполнять какие-либо действия на ее основе.

DJ Mogarych
13-12-2021, 13:34
Нет конкретики, так можно долго беседовать ни о чём, делая какие-то намёки на призрачную схему.

ioSIS
19-12-2021, 01:29
Прошу прощения, если вопрос прозвучал слишком туманно.
Вот конкретный случай, где это будет использовано:
Есть ноутбук на даче, где часто выключают свет. У ноутбука своей батареи нет, планируется подключать его к автомобильному аккумулятору через переходник 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 в скрипт пользователя.

alpap
19-12-2021, 01:51
... (msg * %_batterylevel%& SHUTDOWN /H)

ioSIS
19-12-2021, 16:18
... (msg * %_batterylevel%& SHUTDOWN /H)
Так надо постоянно передавать уровень заряда, а не только в момент разрядки. Да и msg вылазит поверх всех окон, а надо в фоне, чтоб пользователь, когда ему надо, сам мог посмотреть заряд.

Iska
19-12-2021, 17:27
ioSIS, тогда Вы выбрали не тот инструмент и не тот способ. Правильный выбор — служба (service) и пользовательский UI (интерфейс).

alpap
19-12-2021, 19:16
или делать вывод в файл ... do SET _batterylevel=%%i& >>"out.txt" (echo %date%_%time%: %%i), если просто статистика нужна.
(ведь у вас же запись каждую секунду, в окне все равно ничего будет на отследить после сотни записей, я поэтому и пытался делать вывод согласно логике - только при экстренном случае)

ioSIS
20-12-2021, 05:17
ioSIS, тогда Вы выбрали не тот инструмент и не тот способ. Правильный выбор — служба (service) и пользовательский UI (интерфейс). »

Ну, "служба" у меня уже есть. Осталось придумать к ней UI. CMD выбрал, т.к. посчитал, что это самый быстрый способ реализации.

или делать вывод в файл ... do SET _batterylevel=%%i& >>"out.txt" (echo %date%_%time%: %%i), если просто статистика нужна.
(ведь у вас же запись каждую секунду, в окне все равно ничего будет на отследить после сотни записей, я поэтому и пытался делать вывод согласно логике - только при экстренном случае)»

А все отслеживать не надо, достаточно знать последнее значение, чтоб прикинуть, сколько ещё времени работы осталось.
Обмен данными через файл возможен и очевиден, но хотелось бы именно "безфайловый" метод. Почему? Для расширения кругозора и освоения всех возможностей системы.




© OSzone.net 2001-2012