Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Обмен данными между BAT-скриптами не через файл (http://forum.oszone.net/showthread.php?t=350257)

ioSIS 12-12-2021 01:47 2974911

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

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

megaloman 12-12-2021 10:57 2974919

Цитата:

Цитата ioSIS
Имеется два скрипта, один запущен как служба, а второй должен получать от него инфу и выводить пользователю. »

При такой постановке второй не нужен, пусть первый сообщает. Буквально накануне что-то похожее обсуждалось. Либо первый скрипт запускает второй с данными в параметрах.

ioSIS 13-12-2021 00:47 2974970

Цитата:

Цитата megaloman
При такой постановке второй не нужен, пусть первый сообщает. Буквально накануне что-то похожее обсуждалось. Либо первый скрипт запускает второй с данными в параметрах. »

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

DJ Mogarych 13-12-2021 10:57 2974983

А в чём проблема для SYSTEM выводить информацию пользователю?

ioSIS 13-12-2021 11:01 2974984

Цитата:

Цитата DJ Mogarych (Сообщение 2974983)
А в чём проблема для SYSTEM выводить информацию пользователю?

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

DJ Mogarych 13-12-2021 13:34 2974991

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

ioSIS 19-12-2021 01:29 2975602

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

... (msg * %_batterylevel%& SHUTDOWN /H)

ioSIS 19-12-2021 16:18 2975623

Цитата:

Цитата alpap (Сообщение 2975603)
... (msg * %_batterylevel%& SHUTDOWN /H)

Так надо постоянно передавать уровень заряда, а не только в момент разрядки. Да и msg вылазит поверх всех окон, а надо в фоне, чтоб пользователь, когда ему надо, сам мог посмотреть заряд.

Iska 19-12-2021 17:27 2975627

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

alpap 19-12-2021 19:16 2975635

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

ioSIS 20-12-2021 05:17 2975653

Цитата:

Цитата Iska
ioSIS, тогда Вы выбрали не тот инструмент и не тот способ. Правильный выбор — служба (service) и пользовательский UI (интерфейс). »

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

Цитата:

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

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


Время: 23:45.

Время: 23:45.
© OSzone.net 2001-