Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Python + bash

4 réponses
Avatar
Doug713705
Bonjour à toutes, tous,

Je vais devoir me lancer dans la réalisation d'une interface graphique
pour une application écrite en bash.

Plusieurs solutions sont possibles[1] et je souhaite obtenir un conseil
concernant les appels de code bash à partir de python.

Intuitivement je dirai que ce n'est pas une super bonne idée mais je
n'ai pas vraiment d'argument.

Qu'en pensez-vous ?

Si rien ne s'opposait fondamentalement à ce principe d'appeler du bash
depuis un code python, quelle serait la meilleure manière d'opérer (la
plus fiable et la plus sécurisante) ?

Toujours dans l'hypothèse où il n'y aurait pas de contre-indication,
quelle toolkit utiliseriez vous sachant que l'aspect esthétique à son
importance et qu'idéalement l'application doit pouvoir tourner en plein
écran sans décoration de fenètre.

Merci pour vos conseils.

[1] Dont transposer la partie bash en python ce qui pour d'autres
raisons ce ne serait pas souhaitable ou réaliser l'interface graphique
en bash avec yad (http://sourceforge.net/projects/yad-dialog/ ) mais
pour le coup c'est moins qui coince sur cette méthode car ça m'oblige à
apprendre quelque chose qui, quoi qu'interressant, semble assez limité
et risque de m'obliger à d'incroyables contorsions.

--
Je m'affale sur la scène
Le père Fouettard est mort
Mais on apprend la haine
Dans nos livres d'histoire
-- H.F. Thiéfaine, Première descente aux enfers par la face nord

4 réponses

Avatar
Damien Wyart
* Doug713705 in fr.comp.lang.python:
Plusieurs solutions sont possibles[1] et je souhaite obtenir un conseil
concernant les appels de code bash à partir de python.



Ca dépendra beaucoup de comment fonctionne ton code en bash: est-ce
qu'il y a de l'interactivité (questions/réponses), des options en ligne
de commande... Est-ce que tu peux la modifier pour la rendre plus facile
à appeler de l'extérieur...

Intuitivement je dirai que ce n'est pas une super bonne idée mais je
n'ai pas vraiment d'argument.



Si l'application en bash n'est pas super complexe (combien de lignes de
code environ ? Que fait-elle précisément ?), refaire cette partie en
Python pourrait être plus pérenne, notamment si des portions de ton
application existent déjà dans l'écosystème Python (le nombre de
bibliothèques existantes est vraiment énorme).

Le bash c'est quand même assez verbeux, et une réécriture en Python
permet de réduire fortement la longueur du code car on n'appelle plus
les outils Unix pour travailler sur des chaines de caractères (cut, grep
& co)...

Je pense aussi à pexpect qui pourrait t'aider pour l'interfaçage :
https://pexpect.readthedocs.org/en/latest/
https://github.com/pexpect/pexpect

J'ai aussi déjà vu ça mais je ne connais pas en détail :
https://github.com/jerryzhujian9/easyshell

Si rien ne s'opposait fondamentalement à ce principe d'appeler du bash
depuis un code python, quelle serait la meilleure manière d'opérer (la
plus fiable et la plus sécurisante) ?



Tu pourrais aussi modifier ton code bash pour afficher des éléments
graphiques, par exemple avec Zenity ou Gtk-server.

J'ai aussi trouvé ça mais ça me semble assez brouillon, je n'ai pas un
très bon feeling : https://github.com/BashGui/easybashgui

Toujours dans l'hypothèse où il n'y aurait pas de contre-indication,
quelle toolkit utiliseriez vous sachant que l'aspect esthétique à son
importance et qu'idéalement l'application doit pouvoir tourner en
plein écran sans décoration de fenètre.



C'est un troll fréquent chez les programmeurs Python... Les deux "poids
lourds" dont PyQt et wxPython. PyQt est vraiment très bon, mais il
y a aussi pas mal d'autres choix :
http://docs.python-guide.org/en/latest/scenarios/gui/
https://wiki.python.org/moin/GuiProgramming
http://stackoverflow.com/questions/520015/cross-platform-gui-toolkit-for-deploying-python-applications
http://www.pythoncentral.io/introduction-python-gui-development/

--
DW
Avatar
Doug713705
Le 22-11-2014, Damien Wyart nous expliquait dans
fr.comp.lang.python
(<54706e39$0$2890$) :

Plusieurs solutions sont possibles[1] et je souhaite obtenir un conseil
concernant les appels de code bash à partir de python.



Ca dépendra beaucoup de comment fonctionne ton code en bash: est-ce
qu'il y a de l'interactivité (questions/réponses), des options en ligne
de commande... Est-ce que tu peux la modifier pour la rendre plus facile
à appeler de l'extérieur...



Le code est intéractif, les choix de l'utilosateur sont prépondérants
sur le déroulement de l'application

Le code bash est modifiable au besoin.

Intuitivement je dirai que ce n'est pas une super bonne idée mais je
n'ai pas vraiment d'argument.



Si l'application en bash n'est pas super complexe (combien de lignes de
code environ ? Que fait-elle précisément ?),



Le code n'est pas super complexe mais quand même un petit peu, ça t'aide
vachement ça, hein ? :)

Pour être précis c'est le script d'installation d'une distribution
Linux !

Le code bash gère donc les entrées utilisateur et lance les diverses
actions ad hoc.

refaire cette partie en
Python pourrait être plus pérenne, notamment si des portions de ton
application existent déjà dans l'écosystème Python (le nombre de
bibliothèques existantes est vraiment énorme).



Oui, je suis assez partisant de réécrire le tout en python d'autant plus
que je commence à pas trop mal connaître ce langage mais ce serait
perdre en lectorat. J'entends par là que bien que python me
semble plus facile à lire, le bash est lu courament par plus de monde
que le python (Estimation au doigt mouillé).

Le bash c'est quand même assez verbeux, et une réécriture en Python
permet de réduire fortement la longueur du code car on n'appelle plus
les outils Unix pour travailler sur des chaines de caractères (cut, grep
& co)...



Oui, mais du coup c'est moins "sport" :D

Je pense aussi à pexpect qui pourrait t'aider pour l'interfaçage :
https://pexpect.readthedocs.org/en/latest/
https://github.com/pexpect/pexpect



Merci pour ces liens, ça pourrait m'aider :)

J'ai aussi déjà vu ça mais je ne connais pas en détail :
https://github.com/jerryzhujian9/easyshell

Si rien ne s'opposait fondamentalement à ce principe d'appeler du bash
depuis un code python, quelle serait la meilleure manière d'opérer (la
plus fiable et la plus sécurisante) ?



Tu pourrais aussi modifier ton code bash pour afficher des éléments
graphiques, par exemple avec Zenity ou Gtk-server.



Oui, ce sont des pistes en cours d'exploration, notamment yad (un fork
de zenity).

J'ai aussi trouvé ça mais ça me semble assez brouillon, je n'ai pas un
très bon feeling : https://github.com/BashGui/easybashgui



La plupart de ces projets sont soit brouillons soit assez limités dans
leurs fonctionalités. Je ne les connais pas tous mais à ce jour yad m'a
semblé le plus souple.

Toujours dans l'hypothèse où il n'y aurait pas de contre-indication,
quelle toolkit utiliseriez vous sachant que l'aspect esthétique à son
importance et qu'idéalement l'application doit pouvoir tourner en
plein écran sans décoration de fenètre.



C'est un troll fréquent chez les programmeurs Python... Les deux "poids
lourds" dont PyQt et wxPython. PyQt est vraiment très bon, mais il
y a aussi pas mal d'autres choix :
http://docs.python-guide.org/en/latest/scenarios/gui/
https://wiki.python.org/moin/GuiProgramming
http://stackoverflow.com/questions/520015/cross-platform-gui-toolkit-for-deploying-python-applications
http://www.pythoncentral.io/introduction-python-gui-development/



Entre les deux wxPython aurait ma préférence mais c'est une préférence
qui n'est pas forcément rationnelle. Juste que d'une manière générale je
n'aime pas trop Qt.

Personnellement je me sentirai également bien de le faire en tkInter
parce que j'ai déjà joué avec mais c'est moins joli (quoi qu'il me
semble qu'on peut maintenant appliquer un thème ce qui relève un peu).

Que penses-tu de glade et de pygobject ?

--
Et leurs aéroports se transforment en bunkers
A quatre heures du matin derrière un téléphone
Quand leurs voix qui s'appellent se changent en revolvers
Et s'invitent à calter en se gueulant come on
-- H.F. Thiéfaine, Les dingues et le paumés
Avatar
Damien Wyart
* Doug713705 in fr.comp.lang.python:
Le code n'est pas super complexe mais quand même un petit peu, ça
t'aide vachement ça, hein ? :)



;)

Pour être précis c'est le script d'installation d'une distribution
Linux !



En effet, c'est un peu particulier, du coup... C'est une distribution
dont tu es le mainteneur ou juste un contributeur ? C'estr une distrib
spécialisée (maintenir une Nième distrib généraliste me semble assez
futile).

Sinon, il y a plusieurs installeurs existants en Python, ça peut servir
de base de départ pour la réécriture (ça dépend aussi quelle est la base
de la distrib, plutôt RH ou Debian).

Le code bash gère donc les entrées utilisateur et lance les diverses
actions ad hoc.



pexpect devrait être bien adapté.

Oui, je suis assez partisant de réécrire le tout en python d'autant
plus que je commence à pas trop mal connaître ce langage mais ce
serait perdre en lectorat.



Si tu développe une couche graphique, je pense que c'est pour rendre
l'installeur plus "user-friendly" ; du coup pas sur que la lecture du
code concerne le même public...

Que penses-tu de glade et de pygobject ?



Je ne connais pas en détail, donc pas d'avis particulier ; j'ai juste
l'impression que c'est en perte de vitesse.

--
DW
Avatar
Doug713705
Le 22-11-2014, Damien Wyart nous expliquait dans
fr.comp.lang.python
(<5470877f$0$5113$) :

* Doug713705 in fr.comp.lang.python:
Le code n'est pas super complexe mais quand même un petit peu, ça
t'aide vachement ça, hein ? :)



;)

Pour être précis c'est le script d'installation d'une distribution
Linux !



En effet, c'est un peu particulier, du coup... C'est une distribution
dont tu es le mainteneur ou juste un contributeur ? C'estr une distrib
spécialisée (maintenir une Nième distrib généraliste me semble assez
futile).

Sinon, il y a plusieurs installeurs existants en Python, ça peut servir
de base de départ pour la réécriture (ça dépend aussi quelle est la base
de la distrib, plutôt RH ou Debian).



C'est une distribution dont je suis contributeur (c'est un bien grand
mot aujourd'hui puisque je n'y ai pas encore contribué).

Cette distribution généraliste autonome, elle n'est pas basée sur une
autre distribution. Son objectif est de fournir une distribution
totalement francisée y compris les fichier de configuration.

http://www.0linux.org

Le code bash gère donc les entrées utilisateur et lance les diverses
actions ad hoc.



pexpect devrait être bien adapté.



Ok d'acc, je vais regarder ça de plus prêt.

Oui, je suis assez partisant de réécrire le tout en python d'autant
plus que je commence à pas trop mal connaître ce langage mais ce
serait perdre en lectorat.



Si tu développe une couche graphique, je pense que c'est pour rendre
l'installeur plus "user-friendly" ; du coup pas sur que la lecture du
code concerne le même public...



Non bien sûr mais le mainteneut principal de la distribution ne parle
pas encore le python.

Que penses-tu de glade et de pygobject ?



Je ne connais pas en détail, donc pas d'avis particulier ; j'ai juste
l'impression que c'est en perte de vitesse.



Ok d'acc.

Merci pour tes conseils et avis.

--
Pauvre petite fille sans nourrice
Arrachée du soleil
Il pleut toujours sur ta valise
Et t'as mal aux oreilles
-- H.F. Thiéfaine, Mathématiques souterraines