0 / 0 / 0
Регистрация: 02.08.2024
Сообщений: 3

Как передать какое-либо значение в уже запущенный фоновый скрипт

02.08.2024, 21:17. Показов 711. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
на роутере с openwrt запущен скрипт который представляет из себя xmpp бот. при определенном сообщении от пользователя, бот отправляет ответное сообщение из log-файла. но иногда нужно чтобы система сама отправляла log.
сам бот запускается командой ./bot.py & после чего создается xmpp сессия и бот продолжает работу в фоновом режиме. предполагаю что системе нужно запускать второй скрипт питон который принимает команду от системы и затем передает в bot.py
помогите это реализовать


Code
1
2
#!/usr/bin/env python
# -*- coding:utf-8 -*-
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from sys import stdin
from sys import stdout
import time
import subprocess
import sh
from sh import ls
import asyncio
import logging
 
 
from subprocess import Popen, PIPE
from slixmpp import ClientXMPP
 
 
class Bot(ClientXMPP):
 
    def __init__(self, jid, password):
        ClientXMPP.__init__(self, jid, password)
        self.add_event_handler("session_start", self.start)
        self.add_event_handler("message", self.message)
 
    def start(self, event):
        self.send_presence()
        self.get_roster()
 
    def message(self, msg):
        if msg['type'] in ('chat', 'normal'):
            message_text = msg['body']
            if "ping" in message_text.lower():
                ping = subprocess.check_output(["ping", "-c","2", "-W","3", "ya.ru"])
                message_text = msg['ping']
                reply = format(message_text)
                msg.reply(reply).send()
            
#           elif "cece" in message_text.lower():
#               reply = "muxa"
#               msg.reply(reply).send()
 
            elif "out" in message_text.lower():
                f = open("buffer", "w")
                subprocess.call(['./ping.py', '>', 'buffer'], shell=True, stdout=f)
                f = open('buffer','r')
                reply = f
            
    
            else:
                message_text = msg['body']
                reply = "Ты сказал: {}".format(message_text)
                msg.reply(reply).send()
 
if __name__ == '__main__':
   
    logging.basicConfig(level=logging.DEBUG,
                        format='%(levelname)-8s %(message)s')
 
    xmpp = Bot("***@jabber.ru/bot", "***")
    xmpp.register_plugin('xep_0030') # Service Discovery
    xmpp.register_plugin('xep_0004') # Data Forms
    xmpp.register_plugin('xep_0060') # PubSub
    xmpp.register_plugin('xep_0199') # XMPP Ping
    xmpp.connect()
    xmpp.process()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2024, 21:17
Ответы с готовыми решениями:

Как передать какое-либо значение в другую форму
Помогите пожалуйста уже все перепробовал ни как не получается!!! В первой форме я выбираь текстовый фаил! private void...

Передать данные в уже запущенный экземпляр приложения
Здравствуйте! В английском не силен. Поэтому делаю скрин программы (описание или настройки на английском), затем открываю сайт...

Как передать значение поля открытого документа в фоновый агент?
В документе(не сохраненном) выбираем дату и по кнопке запускаем агент @Command(;"Название агента"). Как передать значение поля...

5
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.08.2024, 05:20
Если джаббер-сервер позволяет ботам создавать две сессии (а он скорее всего позволяет). то просто скопируйте часть кода во второй скрипт и отправляйте данные на сервер.

Добавлено через 35 секунд
Первый скрипт крутится в цикле.

Второй запустился, отправил данный, завершился.
0
0 / 0 / 0
Регистрация: 02.08.2024
Сообщений: 3
03.08.2024, 08:09  [ТС]
нет, мне нужно именно через эту сессию отправлять
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.08.2024, 15:00
Придумал: пишете сообщение для отправки в какой-то файл и отправляете сигнал скрипту. Как-то так:

Python
1
2
3
# основной скрипт при старте
with open('/tmp/bot.pid', 'w', encoding='utf-8') as f:
    f.write(str(os.getpid()))
Второй скрипт:
Bash
1
2
3
4
# перепишете на питон, мне лень
echo 'Message' > /tmp/bot.txt
BPID=$(cat /tmp/bot.pid)
kill -SIGUSR1 $BPID
И первый скрипт обрабатывает сигнал:
Python
1
2
3
4
def sig_usr1(signum, stack):
    pass  # здесь вычитываете /tmp/bot.txt и отправляете серверу
 
signal.signal(signal.SIGUSR1, sig_usr1)
0
0 / 0 / 0
Регистрация: 02.08.2024
Сообщений: 3
04.08.2024, 00:47  [ТС]
извините, не понял вашу мысль.
основной скрипт при старте - это в бот добавить нужно, или это уже другой скрипт?

далее что происходит? мы получаем pid бота, записываем в файл и присваиваем содержимое этого файла в переменную bpid
так?

для чего делается kill -SIGUSR1 $BPID ?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.08.2024, 05:28
Цитата Сообщение от Jonas Ivanovich Посмотреть сообщение
основной скрипт при старте - это в бот добавить нужно, или это уже другой скрипт?
Да, бот при старте записывает свой PID в файл и навешивает обработчик сигнала SIGUSR1.

Кто-нибудь сторонний подготавливает сообщение для отправки и дёргает сигнал по PID.

Впрочем, возможно, это всё переусложнено и можно обойтись потоками в боте. Я написал код на предположении, что внешнее событие срабатывает по крону или ещё по какому условию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2024, 05:28
Помогаю со студенческими работами здесь

Как в порт P послать какое-либо значение N ?
Как в порт P послать какое-либо значение N ?

Как реализовать скрипт, который посылает всем пользователям, находящимся в системе, какое-либо сообщение на екран
Добрый день. Можете мне помощь Как реализовать bash скрипт, который посылает всем пользователям, находящимся в системе, какое-либо...

Как передать из console C# с помощью метода гет какие-либо данные в скрипт?
Как передать из console C# с помощью метода гет какие-либо данные в скрипт?Ну, или при возможноте с помощью пост.+если можно пример:) ...

Как остановить уже запущенный метод?
Вот к примеру я вызываю метод в Form_Load() SpisokBreakfast(); И он уже выполняет свою функцию, можно ли остановить метод через...

Как на этапе объявления присвоить переменной типа TPoint какое-либо значение?
Ну собственно весь вопрос в сабже. Если кому не понятно, приведу пример, вот допустим блок объявления переменных var i:integer=1; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru