samedi 27 décembre 2014

Linux Mint: Démarrer un Script Python depuis de bureau

Cet article décrit les différentes étapes pour démarrer un script python à partir d'un lien sur le bureau de Linux Mint (dérivé d'Ubuntu).

Introduction
PrestaShop est un chouette e-commerce mais il traine malheureusement quelques lacunes parfois très handicapantes.
L'une de ses faiblesses se trouve dans le SAV... il est parfois impossible de localiser un nouveau message client lorsqu'il l'envoi sur un ancien ticket (nous avons +3000 ticket et +5000 messages. Argh!

Utiliser un script Python
Grâce à l'API PrestaShop et à Python, il est possible d'écrire un script qui lit les derniers messages reçu sur le WebShop... ce qui permet de localiser plus facilement un tel message et d'avoir les informations adéquate pour le localiser rapidement (l'ID du fil de discussion dans notre cas).

Les scripts Python et utilisateurs finaux
Si je suis à l'aise avec un terminal Linux, ce n'est pas le cas de tout le monde.
L'idéal, c'est quand même d'avoir une icon sur le Bureau qui permet de lancer le script et afficher les résultats attendu.
Même si l'affichage est en mode texte vilain et méchant, ce n'est pas un problème... par contre, le démarrage du script reste un point critique pour un utilisateur Lambda.
C'est là que les choses sont un poil plus compliquées...

Bloquer le script en fin d'exécution
C'est idiot mais il est important de bloquer le script en fin d'exécution. Dans le cas contraire, le script termine son travail... l’interpréteur Python aussi et la fenêtre disparait de l'écran.
Le but c'est de laisser à l'utilisateur le temps de lire le résultat qui s'affiche à l'écran!
Pour cela, n'oubliez pas de faire un import sys en début de script
        import sys

Puis de terminer votre script python par les lignes pour force l'utilisateur à encoder un caractère pour terminer l'exécution du script
    # read char on keyboard
    char = sys.stdin.read(1)
    return 0


Ce que nous avons fait dans notre script savtrack.py...

Créer un Shell Script
Avant toute chose, il est vivement recommandé de créer un shell script (.sh) pour démarrer le script Python.
Le but de ce dernier est:
1) mettre en place les éléments nécessaires à la bonne exécution du script python
2) lancer le script python... éventuellement dans un terminal plus convivial! 

Dans le cas de notre script savtrack.py, nous devons absolument nous trouver dans le sous répertoire PrestaConsole du répertoire utilisateur (le fameux ~/PrestaConsole).
Notre script python à besoin de lire les fichiers cachefile.pkl et config.ini... faut mieux se trouver dans le bon répertoire avant de démarrer le script!

allons y, créons notre script shell "savtrack.sh"... c'est lui qui sera démarré depuis notre bureau Linux.

#!/bin/bash

echo ==========================================
echo       listing SAV
echo ==========================================

cd /home/domeu/PrestaConsole
mate-terminal -e "/usr/bin/python /home/domeu/PrestaConsole/savtrack.py"

Comme vous pouvez le noter, nous faisons un cd (change directory) dans le bon répertoire avant de lancer le script python à l'aide de:
/usr/bin/python /home/domeu/PrestaConsole/savtrack.py

C'est quoi ce mate-terminal???
En fait, en lançant le script "savtrack.sh" depuis le bureau (voir plus loin), Linux Mint va utiliser le terminal xterm par défaut, terminal efficace mais très rudimentaire et peu convivial de prime abord.

Mon script crache un listing assez long (plus qu'un écran) et il est donc important d'avoir un terminal qui dispose d'une scrollbar permettant de naviguer dans le lonnngggg texte produit par notre script savtrack.py.
C'est pour cela que mate-terminal est utilisé pour démarrer le script python.
Résultat affiché dans mate-terminal
Rendre le script shell exécutable
Ce n'est pas tout d'avoir, un script savtrack.sh pour mettre la machine en branle, il faudrait également que ce dernier soit exécutable. Voici la commande qui rendra cela possible.

chmod +x savtrack.sh

n'hésitez pas a tester directement votre script shell depuis le terminal. Il suffit de taper la commande

./savtrack.sh

(le préfix ./ sert à informer le terminal, sans ambiguité possible, que nous voulons bien exécuter le script).

Installer xterm
Comme précisé, l'icone sur le bureau lancera savtrack.sh dans le terminal xterm (par défaut).
Pour une raison que j'ignore, xterm n'était pas installé sur mon système?!?! Pour y remédier, saisissez la commande suivante dans un terminal.

sudo apt-get install xterm

Création du lien (lanceur) sur le bureau

Faite un clique droit sur votre bureau... puis sélectionnez l'option "Créer un lanceur..." dans le menu contextuel.

Cela affiche une boite de dialogue suivante
Création d'un lanceur
La première chose à faire est de sélectionner le type de lanceur... "application dans un terminal"... c'est cette option qui permet de lancer un script shell. Le terminal utilisé sera xterm (par défaut).

Reste à compléter le restant des information... attention a bien sélectionner le script shell dans la commande (savtrack.sh dans notre cas).

Pressez OK et le raccourci est créé sur le bureau :-)
Voila!

Note pour les puristes:
Il est bien entendu possible de modifier le terminal à utiliser par le lanceur.
Il serait donc possible de remplacer directement xterm par mate-terminal.
Par contre, cela nous impose de se souvenir de la modification si nous voulons installer notre script sur un autre ordinateur....
A contrario, les choses sont "écrites" noir sur blanc dans notre shell script.

Aucun commentaire: