MagPI 8 Page 30

De Le French MagPi
Aller à : Navigation, rechercher

Python peut lancer des sous-processus qui fonctionnent séparément. L'utilisation de cette approche rend possible la création de n'importe quel nombre de gadgets de bureau.

Nous allons créer deux gadgets : un lecteur de flux RSS rudimentaire et un programme qui télécharge l'image du site Astronomy Picture of the Day.


Lancez magpi_widgets.py. Ce script lancera les gadgets widget_image.py et widget_rss.py. Un unique CTRL+C dans le terminal va envoyer un signal de terminaison à chaque sous-processus. Ce code a besoin de modules Python supplémentaires, ces derniers pouvant être installés depuis le terminal :

sudo apt-get install python-setuptools
sudo easy_install-2.7 pip 
sudo pip install feedparser # analyseur RSS
sudo pip install beautifulsoup4 # analyseur HTML
sudo apt-get install python-imaging-tk # manipulation d'images

magpi_widgets.py :

# Gadgets Python utilisant pygame et sous-processus
# Par ColinD - 02 novembre 2012

import subprocess, os, signal, Tkinter, time
# lance les sous-processus des gadgets - n'hésitez pas à en ajouter plus ici ! pImg = subprocess.Popen(["python","widget_image.py"],stdin=subprocess.PIPE) pRss = subprocess.Popen(["python","widget_rss.py"],stdin=subprocess.PIPE)
# envoie la largeur de l'écran aux sous-processus r = Tkinter.Tk() width = r.winfo_screenwidth() pImg.stdin.write(str(width)+"\n") pRss.stdin.write(str(width)+"\n")
# Exécution jusqu'à ce que les sous-processus soient tués par un seul CTRL-C try: while True: time.sleep(1) except KeyboardInterrupt: os.kill(pImg.pid, signal.SIGKILL) os.kill(pRss.pid, signal.SIGKILL)

widget_image.py :

import urllib, Image, pygame, os, sys, time
from bs4 import BeautifulSoup

# lit l'entrée standard depuis le processus parent et calcule la position du gadget à l'écran baseXPos = int(sys.stdin.readline()) - 200 - 10 os.environ['SDL_VIDEO_WINDOW_POS'] = str(baseXPos) + "," + str(30)
# affiche une fenêtre sans bordure pour contenir l'image redimensionnée windowSurface = pygame.display.set_mode((200,200), pygame.NOFRAME)
while True: try: soup = BeautifulSoup( urllib.urlopen('http://apod.nasa.gov/apod/astropix.html')) # L'image d'APOD possède un tag ce qui nous permet d'utiliser find au lieu de findAll imgTag = soup.find('img') imgUrl = imgTag['src']

VERSION PYTHON : 2.7.3rc2
VERSION PYGAME : 1.9.2a0
O.S. : Debian 7

TESTÉ !

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Boîte à outils