Partager très simplement des fichiers avec Python SimpleHTTPServer

closeCet article a été publié il y a 9 ans 12 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Les méthodes pour partager des dossiers/fichiers sont nombreuses pour nos machines, que ce soit sous Windows ou Linux : CIFS/Samba, SSH, FTP, NFS… et mine de rien, ce bon vieux HTTP. Aussi surprenant que ça paraisse, pour du partage simple, c’est probablement la méthode la plus simple, la plus rapide, si l’on dispose de Python.

Configurer un partage de dossiers sous Windows ou Linux n’est pas toujours sans difficulté. Je n’évoque même pas SSH, surtout si vous suivez mes recommandations, et les Windowsiens sont exclus de cette méthode. FTP demande aussi beaucoup d’attention. NFS est assez lourd à mettre en place et plutôt rigide, et en plus, demande un peu de travail pour rester en sécurité. Reste donc l’HTTP.

Un petit serveur Web, mais pas celui que vous croyez

Les gens qui pensent serveur Web/HTTP clameront tout de suite Apache, Nginx, Lighttpd ou que sais-je encore. Tous ces serveurs ont besoin d’une configuration minimale qui prend à peu près autant de temps que les solutions évoquées plus haut, donc ne conviennent pas à du très rapide.

En effet, Python 2.6 et suivants disposent d’un module diablement pratique, appelé SimpleHTTPServer pour Python 2, et  plus sobrement http.server pour Python 3, qui comme son nom l’indique, est un serveur HTTP simple. Et il ne vole pas son nom, tellement les fonctions sont limitées. En contrepartie, non seulement il est vite lancé (une seule ligne de commande suffit), mais en plus, ça le rend portable comme jamais.

Une seule commande pour les gouverner tous

Il vous suffit donc de disposer d’une version de Python au minimum pas trop ancienne (2.7.3 sous Debian Wheezy fonctionne), et d’une fenêtre avec une invite de commandes, et la possibilité d’obtenir des droits administrateurs avec (root ou sudo pour les linuxiens, console en mode administrateur sous Windows).

pythonshare-windowscmdadmin

Dans cette console, il faut vous rendre dans le dossier que vous souhaitez partager (au moyen de la commande cd), et de saisir la commande suivante :

Ou en Python 3 :

Par défaut, il écoute sur le port 8000, sauf si comme dans l’exemple on spécifie un port différent. Il suffit ensuite d’ouvrir un navigateur Web sur la machine de destination et d’y saisir l’adresse IP suivie du port défini, 9999 dans l’exemple :

pythonshare-browser

Et voilà ! Pour arrêter le partage, il suffit de couper le serveur, soit en fermant la fenêtre de la console, soit en usant de ce bon vieux raccourci clavier Ctrl+C.

Idéal seulement pour du ponctuel

Cette méthode est certes à la limite du simpliste (et encore, qui aurait parié sur un module Python pour du partage de fichiers ?), et évidemment très peu souple. En effet, le partage ne fonctionne que dans un seul sens, évidemment, vu qu’on est en mode client-serveur, et en lecture seule qui plus est, HTTP oblige. Pour du persistant on se penchera plus sérieusement sur les protocoles cités en introduction. Par exemple, j’ai utilisé Samba/CIFS (les deux noms se rapportant au même protocole, celui utilisé par Windows) sur mon serveur pour partager les nombreux dossiers et fichiers qui y sont stockés, afin qu’ils soient accessibles depuis mes ordinateurs, qu’ils soient sous Windows ou Linux, mais aussi mes appareils Android. Pour du montage sécurisé au-delà du réseau local, NFS et SSHFS seront plus adaptés à la confidentialité nécessaire à ce type de topologie.