À la fin de l'année, le serveur / ordinateur portable de type tour de ma maison est tombé en panne d'un seul coup, et je travaillais dur pour restaurer l'environnement désordonné, mais je ne pouvais rien gérer de nouveau. J'ai créé une application de notification pour.
L'année dernière, j'ai connecté une caméra USB et une LED infrarouge à Raspai pour créer un petit environnement de travail électronique qui donne l'impression de faire fonctionner un téléviseur avec reconnaissance vocale, j'ai donc créé une application Windows avec le sentiment de l'ajouter à cet environnement.
Le flux de données ressemble à ce qui suit.
** ⇒ Le message envoyé en 2 a également été reçu du côté de l'ordinateur portable et le message est apparu. ** **
Le pop-up ressemble à ceci en utilisant Growl. Growl Facile et facile à utiliser! !!
Raspberry PI
Windows10
Au fait, j'étais un peu accro à l'installation et à l'utilisation de pywin32. Merci pour les informations des pionniers. Comment écrire un service Windows en python Short control pour enregistrer votre propre script Python dans Windows Server en tant que service (1) Pywin32 ne fonctionnait pas avec Python 3.4- Le service Windows ne peut pas être démarré avec Python, pywin32
J'ai également fait référence ici à Growl. (Aucun mot de passe requis, est-ce une différence environnementale?) Notification Growl sous Windows
Collez toute la sauce. Cela fonctionne, mais je suis désolé pour les différentes qualités. Lors de la connexion à Rabbit MQ avec pika, j'avais l'habitude de compter sur le blocage de la connexion, donc C'était la première fois que j'utilisais un générateur pour le faire tourner.
win_notification.py
import logging
import logging.handlers
import pika
import win32serviceutil
import win32service
import win32event
import servicemanager
from gntp.notifier import GrowlNotifier
#Journal
LOG_FILE_PATH = 'C:\\tmp\win_notification_consumer.log'
LOG_BK_COUNT = 2
LOG_LEVEL = logging.INFO
# MQ
MQ_IP = "x.x.x.x"
MQ_QUEUE = "Queue2"
#notification
GROW_IP = "127.0.0.1"
GROW_PASS = None
GROW_APP_NAME = "amqp notif"
GROW_NOTIFS = ["Message"]
GROW_NOTE_TYPE = "Message"
GROW_TITLE = "Get Message"
#Service Windows
WIN_SRV_NAME = "WinNotificationConsumer"
WIN_DISP_NAME = "WinNotificationConsumer"
class WinNotificationConsumer(win32serviceutil.ServiceFramework):
# Required Attributes:
_svc_name_ = WIN_SRV_NAME
_svc_display_name_ = WIN_DISP_NAME
def __init__(self, args):
#Initialisation du journal
self.logger = logging.getLogger()
self.logger.setLevel(LOG_LEVEL)
formatter = logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s')
handler = logging.handlers.TimedRotatingFileHandler(
filename=LOG_FILE_PATH,
when='D',
backupCount=LOG_BK_COUNT
)
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)
self.logger.addHandler(handler)
self.logger.debug('init log end.')
#Initialiser autour de l'API Win32
win32serviceutil.ServiceFramework.__init__(self, args)
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
self.logger.debug('init win32 end.')
#Initialisation de la notification
self.notifier = GrowlNotifier(
applicationName=GROW_APP_NAME,
notifications=GROW_NOTIFS,
hostname=GROW_IP,
password=GROW_PASS)
self.notifier.register()
self.logger.debug('init notif end.')
def SvcDoRun(self):
# service start
self.logger.info('service starting...')
#Sortie du journal des événements
servicemanager.LogMsg(
servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, 'test')
)
self.consuming_and_notificate()
def consuming_and_notificate(self):
self.logger.debug('consuming and notificate starting...')
#Paramètres de connexion Rabbit MQ
self.connection = pika.BlockingConnection(
pika.ConnectionParameters(host=MQ_IP)
)
self.channel = self.connection.channel()
#Créer s'il n'y a pas de file d'attente
self.channel.queue_declare(
queue=MQ_QUEUE,
durable=True
)
#Le message obtenu à partir de la file d'attente est tourné par le générateur.
self.logger.info('start consuming message.')
for msg in self.channel.consume(queue=MQ_QUEUE, no_ack=True):
message_body = msg[2]
self.logger.debug(message_body)
self.notifier.notify(noteType=GROW_NOTE_TYPE,
title=GROW_TITLE,
description=message_body)
def SvcStop(self):
# service stop
self.logger.info('service stopping...')
#Utilisez des méthodes de classe supérieure
self.ReportServiceStatus(
win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.stop_event)
#Déconnexion MQ
self.channel.close()
self.connection.close()
self.logger.info('service stopped.')
def main():
#argument('start','stop','install' etc.)Démarrage du service basé sur/enregistrement/Arrêtez/Exécutez la suppression, etc.
win32serviceutil.HandleCommandLine(WinNotificationConsumer)
if __name__ == '__main__':
main()
Vous pouvez vous inscrire et démarrer automatiquement comme ça.
C:\\Python27\python.exe win_notification.py --auto install
J'ai pu faire ce que je voulais faire assez facilement (les différents sentiments de Growl concernant les pop-ups). Depuis que j'ai pu garder RabbitMQ connecté à partir du service Windows, j'ai senti que je pouvais faire diverses choses avec mon ordinateur par commande vocale. Je veux aussi écrire quelque chose sur d'autres applications Python ... On ne m'a pas montré le code existant sans refactorisation ...
Recommended Posts