Avis sur langage de script à apprendre

a marqué ce sujet comme résolu.

Bonjour à tous,

je fais pas mal de Java et j’aimerai bien apprendre un langage de script pour automatiser quelques tâches. J’hésite entre Bash (je travaille pas mal sous Linux) et Python.

Les avantages de Bash est qu’il permet de lancer facilement des commandes Unix et est beaucoup utilisé sous Linux.

Les avantages de Python est qu’il est portable et bien plus riche et me permettra de pouvoir l’utiliser dans d’autres domaines.

Je sais que certains vont me dire d’apprendre les 2 mais j’ai déjà pas mal de chose à apprendre en attente, et je préfère me concentrer sur un des deux pour l’instant mais m’y mettre sérieusement.

Du coup je viens demander vos avis.

Est-ce qu’avec Python on peut lancer "facilement" d’autre programmes/commandes (git…) ?

Merci :)

Edit: J’oubliais, est-ce que c’est toujours Python 2 qui est installé par défaut sur Linux?

+0 -0

L’idéal, c’est d’apprendre les 2.

Si tu n’as pas beaucoup de temps, apprend bash, ça se fait tout seul. Tu n’as pas besoin de beaucoup de temps (c’est un truc qu’on utilise tous les jours presque sous GNU/Linux). Le problème étant qu’il est assez difficile de créer des scripts entier au début, mais c’est vraiment le langage parfait pour automatiser des commandes.

Si tu as un peu plus de temps, apprend Python. C’est un langage beaucoup plus polyvalent. Tu arriveras plus simplement à faire des scripts complexes (ouep, ça semble contradictoire mais non ; bash dès que ça sort de l’automatisation de commande, ça devient un peu difficile).

Par exemple les scripts d’installation sont des scripts bash généralement. Pas du Python. Mais si jamais tu veux faire un truc qui sort de ce domaine, c’est pas bash qui est utilisé généralement.

Il n’y a pas qu’une seule version de Linux, c’est difficile de répondre. Donc non chez moi c’est la version 3. Mais dans tout les cas désormais oublie Python 2, apprendre Python 3.

+0 -0

Salut,

Si ça peut t’aider à choisir, mon expérience personnelle est qu’apprendre bash sérieusement ne t’apportera pas grand chose. Je passe ma vie dans le terminal, et pourtant je n’écris jamais de script bash (sauf cas hyper spécifique où j’ai pas le choix, genre utilisation d’un cluster). Je suis beaucoup plus productif en Python pour la simple raison que le langage est beaucoup mieux pensé et qu’il offre maintenant des abstractions intéressantes pour faire les manipulations typiques qu’on pourrait faire en bash (via pathlib, shutil et dans une moindre mesure sys et os). Résultat, avec Python tu gagnes énormément en possibilités, et pour les "spécialités" de bash la différence de facilité entre les deux est faible.

Pour répondre à cette question :

Est-ce qu’avec Python on peut lancer "facilement" d’autre programmes/commandes (git…) ?

Oui, voir le module subprocess. Après, pour le coup, si tu veux juste lancer quelques commandes git, Python serait un peu overkill et t’as pas besoin d’apprendre bash en profondeur pour pondre un script de quelque lignes.

Salut,

Python sera plus long à apprendre, mais il te permettra de faire des choses évoluées plus rapidement et le code se lira plus facilement et donc ce sera plus simple de le relire et le modifier (pour une réutilisation par exemple). À long terme c’est donc mieux.

Dans le même genre, je me permets de proposer Ruby. Je trouve que c’est du kif-kif avec Python. Python c’est très bon et Ruby c’est joli ! Python c’est pas con et Ruby c’est gentil !

+2 -0

Hum …

Je vais certainement faire l’avocat du diable. Mais là, le PO veux « automatiser quelques tâches ».
Au final, apprendre Python se révèle de manière évidente plus intéressant dès que le PO souhaitera faire autre chose ou des automatisations très complexes. Mais bash est parfait pour automatiser quelques tâches ! Bash est vraiment pas si dur (les bases en tout cas), il arrivera à un résultat plus rapidement.

La lib sh, shutil et pathlib ne sont que des outils pour reprendre des concepts de bases de bash ! En se limitant aux quelques outils de GNU Bash et avec un guide comme Wikibooks. Très rapidement on automatise des tâches en bash. Pour python, bien que la prise en main soit très rapide (bien plus que celle de bash !), l’automatisation risque de devenir une copie plus compliquée de la version bash.

+3 -0

Pour python, bien que la prise en main soit très rapide (bien plus que celle de bash !), l’automatisation risque de devenir une copie plus compliquée de la version bash.

À moins d’être dans le cas très simple et idéalisé de quelque commandes qui se courent après (auquel cas, il n’y a même pas besoin d’apprendre bash du tout, il suffit d’écrire les commandes en question dans le script), c’est simplement faux. Il n’y a rien que tu puisses exprimer en bash qui soit plus compliqué à exprimer en Python. Au pire ce sera un poil un plus verbeux (un mal pour un bien puisque tu gagnes en lisibilité). L’inverse par contre… Qui connait par cœur toutes les ramifications de la différence entre [ ] et [[ ]] ? Qui ne s’est jamais battu avec les simples vs double quotes ? Le typage inexistant ? La syntaxe boiteuse des boucles for ? Les backticks vs $() ? Si le prix à payer pour se débarrasser de tout ça est de devoir importer shutil explicitement et lire sa doc, ça vaut largement le coup.

Je vais certainement faire l’avocat du diable. Mais là, le PO veux « automatiser quelques tâches ».
Au final, apprendre Python se révèle de manière évidente plus intéressant dès que le PO souhaitera faire autre chose ou des automatisations très complexes. Mais bash est parfait pour automatiser quelques tâches ! Bash est vraiment pas si dur (les bases en tout cas), il arrivera à un résultat plus rapidement.

ache

Sauf qu’« automatisation » ça peut vouloir dire beaucoup de choses.

Oui s’il s’agit simplement d’exécuter des programmes les uns à la suite des autres avec des paramètres constants (ou 2–3 variables) ce sera plus simple en bash.

Si l’automatisation inclut gestion de paramètres, conditions et boucles, exécution de programmes en parallèle puis récole des résultats, etc., vouloir travailler en bash devient une horreur : pas seulement pour la personne qui écrit le script mais aussi celles qui seront amenées à le lire/modifier.

Salut !

Je voulais juste appuyer mes VDD pour dire qu’à mon avis ça n’a pas beaucoup de sens de se plonger véritablement dans l’apprentissage de Bash.

Les langages Shell sont très bien pour réaliser des petits scripts "bêtes", c’est-à-dire linéaires et ne nécessitant pas une logique avancée. Cependant dès que tu veux développer un programme un tant soit peu robuste ou évolué tu vas vite te confronter aux limitations de Shell. Je suis en train de me retaper l’écriture de scripts en ce moment et je peux confirmer ce qu’a dit adri1, c’est plein de petits détails de syntaxe / sémantique qu’ils faut maîtriser pour avoir un code fiable et portable. Et tu n’as pas accès aux concepts haut-niveau de langages comme Python, par exemple en POSIX Shell il n’y pas de tableaux ou de variables locales, faut donc bidouiller sans…

Comme tu dis utiliser Linux je te conseillerais d’utiliser la ligne de commande dès que possible, comme ça tu apprendras les notions importantes de Shell / Bash naturellement. Si t’as des besoins ponctuels tu pourras pondre sans difficultés un petit script en regardant ce qui se fait en ligne. Pour le reste préfère passer ton temps à te plonger dans un langage plus riche comme Python, ça sera plus intéressant pour toi à mon avis.

Histoire d’enfoncer le clou… L’autre intérêt de Python vis à vis de Bash c’est que c’est bien plus qu’un langage de script. Donc si tu l’apprends aujourd’hui pour de simples automatisations cela veut dire que tu seras aussi capable de t’en servir dans le futur (moyennant l’apprentissage de libs spécifiques évidemment) dans d’autres situations auxquelles Bash ne répond pas et pour lesquelles Python est couramment utilisé : web, applications CLI & GUI, plugins, maths, traitement d’image…

Autant dire que c’est une compétence très utile. En plus, comme tu viens de Java, les concepts OO ne devraient pas te poser de problème donc tu devrais maitriser les bases rapidement.

Merci à tous pour vos retours.

Bon c’est typiquement pour ce genre de chose

Pour python, bien que la prise en main soit très rapide (bien plus que celle de bash !), Qui connait par cœur toutes les ramifications de la différence entre [ ] et [[ ]] ? Qui ne s’est jamais battu avec les simples vs double quotes ? Le typage inexistant ? La syntaxe boiteuse des boucles for ? Les backticks vs $() ?

adri1

Que j’hésite vraiment à me lancer dedans.

Écrire un peu plus de ligne de code mais que ça soit beaucoup plus facile à lire et à écrire me dérange pas du tout.

Sinon effectivement, pour le moment c’est surtout des scripts de quelques lignes que je souhaite faire, mais si je suis tenté par le Python, c’est justement parce que ce début d’apprentissage peut me permettre de faire plus plus tard.

Du coup je pense que c’est vers Python que je vais me tourner. :)

dans d’autres situations auxquelles Bash ne répond pas et pour lesquelles Python est couramment utilisé : web, applications CLI & GUI, plugins, maths, traitement d’image…

Ça je n’arrête pas de le répéter… On est tous d’accord avec ça.


Bon c’est typiquement pour ce genre de chose

Pour python, bien que la prise en main soit très rapide (bien plus que celle de bash !), Qui connait par cœur toutes les ramifications de la différence entre [ ] et [[ ]] ? Qui ne s’est jamais battu avec les simples vs double quotes ? Le typage inexistant ? La syntaxe boiteuse des boucles for ? Les backticks vs $() ?

adri1

Que j’hésite vraiment à me lancer dedans.

bash en est rempli… Ça ne rentre qu’avec l’habitude… Mais ça ne rend pas la prise en main si difficile que ça en pratique. Les boucles for ne sont pas boiteuses, tu n’as pas besoin de savoir par cœur les différences entre simple et double crochets, le principe suffit… Mais par contre a=5 est valide alors que a = 5 ne l’est pas. -_- Au début ou par manque d’attention, on peut facilement faire des erreurs avec les deux types de crochets, certes.

Écrire un peu plus de ligne de code mais que ça soit beaucoup plus facile à lire et à écrire me dérange pas du tout.

Question de goût… On ne parle pas de la concisions/obscurité de Perl, hein. On parle de bash.

Sinon effectivement, pour le moment c’est surtout des scripts de quelques lignes que je souhaite faire, mais si je suis tenté par le Python, c’est justement parce que ce début d’apprentissage peut me permettre de faire plus plus tard.

Du coup je pense que c’est vers Python que je vais me tourner. :)

Freeza

Je suis certain que c’est le bon choix. 👍

+1 -0

Sous *nix, savoir un minimum bidouiller avec bash (ou autre shell) est nécessaire — c’est la base de la ligne de commande que l’on utilise en permanence. Maintenant, bash ne s’utilise jamais seul. On le mélange allègrement à grep, sed, awk, head, tail, sort… Et encore, ce ne sont que les plus récurrents.

Il est très simple et pratique pour enchainer des exécutions de commandes avec des conditions simples entre.

Seulement, il a son lot de difficultés. Il a plein de subtilités — évoquées plus haut. . Mais aussi de sacrées limites: allez donc faire un dictionnaire de listes de lignes, des boucles imbriquées un peu complexes… C’est là que Python devient plus que pertinent en tant que remplaçant de bash pour enchaîner des choses plus complexes.

Mais pour du simple, bash est indéniablement plus simple. C’est toujours mon premier choix. Franchement si bash avait des listes et des dico mieux foutus, cela réduirait grandement mes besoins d’utilisation de Python — pour enchainer des traitements ou manipuler du texte.

Sous-entendu que pour des vrais codes en peu plus poussés, bash n’a aucun sens, contrairement à Python.

exécution de programmes en parallèle

GNU parallel est assez simple à employer pour des parallélisations simples. Avec un man sort, recoller les résultats dans le bon ordre n’est franchement pas un problème. Bon, OK, sa licence n’est pas commune.

Je suis de l’avis de lmghs, il faut au moins comprendre les notions de base du shell: redirections, commandes utilitaires récurrentes, boucles et conditions. C’est simple et c’est un gain considérable pour des petits scripts jetables.

Après, si tu utilises souvent un terminal, tu peux utiliser IPython. C’est comme bash, mais c’est du python avec une syntaxe proche d’un pour l’utilisation de commande.

+1 aussi avec lmghs puisque tu es sous linux bash est un incontournable - pour moi les 2 sont extrêmement différents , généralement python est beaucoup trop bas niveau pour beaucoup de fonctionnalités de scripts. Puisque tu es java, par contre, passer à python sera une rigolade et donc il serait dommage de ne pas l’utiliser un de ces jours - python 2 c’est fini, normalement tout linux est maintenant avec python 3 (sauf "vieux" serveur)

+1 pour ache
merci de me faire dire ce que je ne pense aucunement :lol:
je vais le reformuler : il y a une différence de niveau en bash et python comme il y a une différence de niveau entre python et C
Donc si les fonctionnalités voulus pour le script sont présentes avec bash, il n’y a aucune raison de choisir python (sauf si l’on a du temps à perdre, envie d’apprendre python ou obligation d’avoir un script béton)

+0 -2

Perso, même connaissant bash, tous mes scripts sont en Python. Ça ne me prend pas franchement plus de temps à écrire, par contre on ne sait jamais quand on aura besoin de changer un outil et ce jour là je sais que je ne voudrai pas lire du bash. Du coup, Python sans hésiter.

+2 -0

Hum… Enchainer des commandes (pipes, &&, ||), me parait infiniment plus simple en bash qu’en python. Quand c’est tout ce que je fais, je ne m’enquiquine pas à rajouter des couches de bruit non nécessaire.

Même si plein de choses sont fondamentalement moisies dans bash (et il y a pire: cmd.exe & cie), ça reste plus simple pour les enchaînements de commandes *nix. Je l’ai dit mon choix est contextualisé à chaque fois.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte