Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 02.08.2024
Сообщений: 3

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

02.08.2024, 21:17. Показов 698. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru