Xonsh : un molusque pour les pythons

Posté le lun., 08 mai 2017

Mis à jour le 29 Dec 2017

Xonsh : un molusque pour les pythons

Xonsh est un interpreteur de commande à l’instar de Bash ou Zsh mais basé sur Python. Pour les adeptes de Python, ce shell est l’hybride parfait entre interpreteur classique et ipython. Il est ainsi possible d’entrer directement du code python qui sera interpreté en tant que tel.

On peut ainsi aisément combiner quelques commandes système avec du code en python. Pour se faire il convient de connaître la syntaxe de xonsh qui permet ces combinaisons.

Voici un petit exemple très simple qui permet de saisir ces rudiments :

for f in $(ls *.flac).splitlines():
    $[ffmpeg -i @(f) -ab 196k -ac 2 -ar 48000 @(f.replace('.flac', '.mp3'))]

L’objet de cette boucle est de convertir via ffmpeg tous les fichiers Flac présents dans le répertoire courant. Deux éléments particulier de syntaxe n’auront pas échappé aux « pythonistes » ni à l’analyse de Pygments : les symboles $ et @ précédant les parenthèses ou crochets. Voici un rapide résumé de quelques éléments de syntaxe dont vous trouverez l’ensemble des variantes dans le tutoriel (en anglais) de xonsh :

$( ) Capture la sortie de l’expression entre parenthèse.
$[ ] La sortie n’est pas capturée et sort directement à l’écran
@( ) Interprète en python l’expression entre parenthèse

Donc pour résumer cette petite boucle :

  1. Capture de la commande ls *.flac, qui nous donne la liste des fichiers flac dans le répertoire sous la forme d’une chaîne de caractère.
  2. Divisions de la chaîne de caractères via .splitlines(), qui divise à chaque caractère de retour à la ligne.
  3. On passe la commande de conversion entre crochet $[ ] pour ne pas capturer la sortie.
  4. Au sein de cette commande on inclu @(f) qui est le nom du fichier flac et l’autre expression entre @() permet de fournir le nom du fichier de sortie en .mp3.

Si ce n’est pas un mal de connaître le Bash, il est très plaisant d’avoir à s’en passer et d’utiliser son langage favori pour automatiser certaines tâches en ligne de commande.Je vous conseille ainsi de vous rendre sur le site du projet et de potasser le tutoriel, c’est assez simple à prendre en main.

© octogene. Propulsé par Pelican. Thème adapté à partir de pelican-svbhack disponible sur github.