Exercice Python, round 3


Continuons cette petite série fort sympathique, avec aujourd’hui un peu de manipulation de bytes, de gestion d’erreur et de parsing d’arguments de script.

Souvenez vous de ce hack qui permet d’avoir sa video Flash en plein écran sur un écran, et travailler sur l’autre, quand on est en dual screen. Le problème c’est qu’il faut le faire à la main. De plus, il faut recommencer à chaque mise à jour de flash. On va automatiser tout ça.

Faites un script (en Python 3 \o/) qui va parser les arguments de la ligne de commande avec argparse. Il doit déclarer :

  • Une docstring.
  • Un message d’help à partir de cette docstring.
  • Un argument positionnel obligatoire devant être le chemin du binaire flash.

Ensuite on ouvre le fichier, on cherche le fameux _NET_ACTIVE_WINDOW, on le deface, et on sauvegarde le tout dans le fichier final. Ce sera l’occasion de jouer un peu avec la gestion plus propre du binaire en Python 3.

Contrairement aux exercices précédent, on met un minimum de check d’erreur car c’est un petit script (35 lignes copieusement commentées chez moi): donc au moins avertir proprement l’utilisateur si on ne peut pas lire ou écrire dans le fichier et pourquoi.

La solution demain.

15 thoughts on “Exercice Python, round 3

  • Gontran

    Un message d’help à partir de cette docstring.

    Bon, pas le choix de la lib on dirait…

  • Sam Post author

    Pas de lib externe, que du stdlib pour les exercices python. Toujours.

  • Sam Post author

    Comme d’hab, si il y a une ambiguïté dans la consigne, n’hésitez pas à le demander en comment. Ici, idéalement on peut utiliser argparse, mais si vous avez envie de le faire à la main, vous pouvez.

  • Sam Post author

    Leur programme est très générique, c’est une bonne idée cela dit, mais l’exo est beaucoup plus simple.

  • Sam Post author

    Faites un script (en Python 3 \o/) …

    … au moins avertir proprement l’utilisateur si on ne peut pas lire ou écrire dans le fichier et pourquoi.

    Bon, Python 2, admettons. Mais pas de check d’erreurs alors que c’est explicitement demandé, bouh ! Mal ! Pas bien ! Méchant foxmask !

  • foxmask

    Me suis battu avec python 3 . j’ai même fait chier du monde sur le channel sur ça ;) sinonj’ai oublié de check si on pouvait lire/écrire en me contenant de check si le fichier était là. Je laisse un autre faire mieux ! Tant pis pour moi j’assume ;)

  • foxmask

    @Yamakaky le lien est bon, c’est wordpress qui n’ajoute pas le ‘=’ final de l’url dans le href du coup on touche pas ton bin0 ;) mais ca va en prenant manuellement tout le lien nous meme

  • Sam Post author

    Yamakaky a été plus propre que moi et fait de jolies fonctions et un if __main__ :)

  • Yamakaky

    \o/

    Je me suis posé une question pendant le codage : est-ce qu’il y a un moyen simple de traduire l’interface de argparse, comme l’aide auto-générée ?

  • Sam Post author

    Tous les messages d’argparses sont écrits avec le module gettext, donc on peut utiliser les outils standard d’i18n pour le faire. Après la doc est muette dessus, donc ça va demander quelques essais avant de trouver le bon réglage. Encore une raison de préférer docopt.

  • Yamakaky

    Ah oui, il utilise argparse. Je vois pas de fichiers d’i18n, du coup faut le faire pour chaque app. Dommage…

    Je suis pas sûr docopt soit plus pratique pour le coup ^^

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.