PROJET AUTOBLOG


Sam & Max: Python, Django, Git et du cul

Site original : Sam & Max: Python, Django, Git et du cul

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Réagir à un changement sur un fichier avec watchdog 14

lundi 13 juillet 2015 à 10:53

Il y a des tas de choses qu’on peut vouloir faire au moment où un fichier change :

Et ce n’est même pas dur à faire en Python grace à la lib watchdog :

pip install watchdog

D’abord, on créer un handler, une classe qui va contenir le code à lancer quand il arrive quelque chose à nos fichiers :

from watchdog.events import FileSystemEventHandler
 
class MonHandler(FileSystemEventHandler):
 
    # cette méthode sera appelée à chaque fois qu'un fichier
    # est modifié
    def on_modified(self, event):
        print("Ah, le fichier %s a été modifé" % event.src_path)
 
    # On peut aussi implémenter les méthodes suivantes :
    # - on_any_event(self, event)
    # - on_moved(self, event)
    # - on_created(self, event)
    # - on_deleted(self, event)
    # - on_modified(self, event)

Ensuite on créé un observer, qui va lancer un thread dans lequel il va… observer :

from watchdog.observers import Observer
 
observer = Observer()
# Surveiller récursivement tous les événements du dossier /tmp
# et appeler les méthodes de MonHandler quand quelque chose
# se produit
observer.schedule(MonHandler(), path='/tmp', recursive=True)

On démarre tout ça :

import time
observer.start()
 
# L'observer travaille dans un thread séparé donc on fait une 
# boucle infinie pour maintenir le thread principal
# actif dans cette démo mais dans un vrai programme,
# vous mettez votre taff ici.
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    # Ctrl + C arrête tout
    observer.stop()
# on attend que tous les threads se terminent proprement
observer.join()

Pour les ones shot, watchdog vient avec la commande watchmedo qui permet de lancer un commande shell en cas d’événement :

# lancer 'echo lefichier' pour chaque fichier python ou texte modifié de mon dossier utilisateur 
watchmedo shell-command --patterns="*.py;*.txt" --recursive --command='echo "${watch_src_path}"' /home/sam

Personnellement j’aime le lundi.


Télécharger le code de l’article

Today is a glorious day 15

dimanche 12 juillet 2015 à 23:29
>>> import crossbar
>>> crossbar.__version__
'0.10.4'
>>> import twisted
>>> twisted.__version__
'15.2.1'
>>> import sys
>>> print('Wait for it...')
Wait for it...
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'

Bougez avec la poste… 13

mercredi 8 juillet 2015 à 18:04

On a décidé de commander quelques trucs pour bidouiller un raspberry PI sur un site américain.

Grâce au Tracking chez UPS on peut savoir où se balade notre colis.
C’est assez cocasse…

Apparement le colis est arrivé dans notre ville mais a du repartir à Paris pour enfin revenir demain ou…

Heureusement que c’est pas un bon Maroilles bien vieux.

laposte

Tester Python 3.5 beta 14

mercredi 8 juillet 2015 à 08:55

Python 3.5 est en phase beta, et c’est une release très (mais alors très très très) attendue.

Si vous ne voulez pas attendre et tester le bouzin de suite, il est facile de setup la bestiole sous linux :

Un exemple possible :

cd /tmp
sudo apt-get install python-dev gcc # ou yum install python-devel gcc
wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0b3.tgz
tar -xvf Python-3.5.0b3.tgz
cd Python-3.5.0b3
./configure
make
sudo make altinstall

Ne faites surtout PAS sudo make install, qui écraserait votre python principal.

Ensuite on lance :

$ python3.5
$ python3.5
Python 3.5.0b3 (default, Jul  5 2015, 23:52:07) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
  File "/home/sam/Scripts/pythonstartup.py", line 119, in 
    store = Store(os.path.join(TEMP_DIR, 'store.%s.db') % python_version)
  File "/home/sam/Scripts/pythonstartup.py", line 93, in __init__
    object.__setattr__(self, 'DICT', shelve.DbfilenameShelf(filename))
  File "/usr/local/lib/python3.5/shelve.py", line 227, in __init__
    Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
  File "/usr/local/lib/python3.5/dbm/__init__.py", line 91, in open
    "available".format(result))
dbm.error: db type is dbm.gnu, but the module is not available
>>> import types
>>> print(':)')
:)
>>>

En dehors du vomi d’intro, tout marche chez moi.

Subreddit Sam et Max 9

dimanche 5 juillet 2015 à 13:49

Il manque un forum pour le blog, et une zone de discussion meta pour IndexError, un vecteur alternatif de propagation d’info à twitter…

On a tenté discourse, trop chiant.

Un vieux forum en PHP, meh.

Coder le truc nous même, trop long.

Ce n’est pas de l’info critique, on a pas besoin d’avoir la main dessus, et si demain on nous ferme on peut vivre avec.

On s’est chauffé à récupérer le code de reddit : python, libre, forum simple. Mais pourquoi se faire chier ? On a juste ouvert un subreddit Sam et Max.

C’est un complément au chan IRC (freenode.net#sametmax) pour discuter d’un peu tout en rapport avec le blog. J’y posterai aussi la plupart des liens que je poste sur twitter, car je sais que plein de gens n’aiment pas twitter.

Tout comme le blog et le compte twitter, ce sera NSFW. Souvenez-vous, les seuls trucs SFW qu’on a pour le moment sont 0bin.net et IndexError.net.

Pas encore de politique de modération précise ou de ligne éditoriale, donc on va affiner au fur et à mesure. Évitez évidemment de poster :

Oui vous pouvez poster des annonces de job. Oui vous pouvez poster un article cool sur une techno JS sympa. Le reddit est plus souple, si c’est pas du Python, c’est pas grave : y a un système de vote qui tuera votre post si tout le monde s’en branle.

Tous les contributeurs les plus actifs du blog, de IE et les modos officiels peuvent d’office demander les droits modo. Il suffit de faire la demande en commentaire dans la version reddit de ce post.

Error happened! 0 - count(): Argument #1 ($value) must be of type Countable|array, null given In: /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php:428 http://ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/?65 #0 /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php(999): VroumVroum_Blog->update() #1 /var/www/ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/index.php(1): require_once('...') #2 {main}