Comment intégrer un code bash dans pyhton
Fermé
AxelleF_11
Messages postés
4
Date d'inscription
lundi 6 mai 2019
Statut
Membre
Dernière intervention
21 mai 2019
-
Modifié le 6 mai 2019 à 10:50
mamiemando Messages postés 33595 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 mars 2025 - 10 mai 2019 à 13:30
mamiemando Messages postés 33595 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 mars 2025 - 10 mai 2019 à 13:30
A voir également:
- Comment intégrer un code bash dans pyhton
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code asci - Guide
- Code puk bloqué - Guide
- Comment créer un qr code - Guide
- Code activation windows 10 - Guide
1 réponse
mamiemando
Messages postés
33595
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 mars 2025
7 834
Modifié le 6 mai 2019 à 12:14
Modifié le 6 mai 2019 à 12:14
Bonjour,
Question préalable
Quand tu dis que le module OTB n'est pas compatible avec ton PC, peux-tu clarifier (message d'erreur, etc) ?
Sous Linux Ubuntu par exemple, ce module peut s'installer avec la commande sudo apt install
En effet, passer par le module python sera plus propre que passer par une commande shell.
Appeler une commande shell en python
Personnellement, j'utilise plutôt
Voici un exemple fonctionnel pour appeler graphviz, dans ton cas il suffirait d'adapter la valeur de la variable
Conseils concernant ton code
Bonne chance
Question préalable
Quand tu dis que le module OTB n'est pas compatible avec ton PC, peux-tu clarifier (message d'erreur, etc) ?
Sous Linux Ubuntu par exemple, ce module peut s'installer avec la commande sudo apt install
python3-otb.
En effet, passer par le module python sera plus propre que passer par une commande shell.
Appeler une commande shell en python
Personnellement, j'utilise plutôt
Popen, cela permet en outre de récupérer les flux (sortie standard et sortie d'erreur) :
Voici un exemple fonctionnel pour appeler graphviz, dans ton cas il suffirait d'adapter la valeur de la variable
cmd, de renommer la fonction et de retravailler ses paramètres, le message d'erreur, et enfin de renommer la variable
doten par exemple
otb:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from subprocess import Popen, PIPE def run_graphviz(s_dot, layout_engine = "dot", format = "svg") -> bytes: """ Convert a dot string (graphviz format) into a graphic file. Args: s_dot: A string in the graphviz format. layout_engine: The graphviz engine used for the rendering. See "man dot" for more details. format: The output graphviz terminal. See "man dot" for more details. Returns: The bytes of the output image iff successful, None otherwise. """ cmd = ['dot', '-T' + format, '-K', layout_engine] dot = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) stdoutdata, stderrdata = dot.communicate(s_dot.encode("utf-8")) status = dot.wait() if status == 0: return stdoutdata.decode("utf-8") else: fstr = "dot returned {}\n[==== stderr ====]\n{}" print(fstr.format(status, stderrdata.decode('utf-8'))) print("Input dot string was:\n%s\n" % s_dot); raise RuntimeError("run_graphviz: invalid string")
Conseils concernant ton code
- Déclarer une fonction dans une boucle n'est pas l'endroit le plus indiqué, mieux vaut la déclarer en début de fichier.
- Pour améliorer la lisibilité de ton code, il serait préférable de déclarer tes variables globales (chemins...) en début de fichier et de leur donner un nom tout en capitales.
- Généralement on met le programme principale dans une fonction (e.g.
main
) ce qui permet par la suite de définir des points d'entrée (voirsetup.py
).
#!/usr/bin/env python3 # -*- coding: utf-8 -*- def main(): # programme if __name__ == '__main__': main() sys.exit(0)
Bonne chance
6 mai 2019 à 15:27
Super merci, je vais essayer avec ça !
6 mai 2019 à 15:30
10 mai 2019 à 13:30
Dans ton cas tu as décidé de ne pas utilisé le python "standard" fourni par linux, mais d'installer anaconda. Cela signifie que tu as un 2e python installé, dans son répertoire propre, et avec ses modules propres.
Comme tu l'as fait, il est naturel de passer par . Par contre, les paquets Conda ne sont nommés comme dans apt, mais plutôt comme dans python. Ici, en toute logique ce serait par exemple . Malheureusement, ce paquet n'existe pas actuellement. À moins de trouver un dépôt anaconda on n'y arrivera pas comme ça.
Si tu souhaites absolument utiliser conda, il faudra installer autrement.
Méthode 1 : installation via le gestionnaire de paquets (recommandée)
En admettant que tu sois sous debian/ubuntu :
Méthode 2 : installation manuelle
On suit la procédure d'installation officielle :
1) Installer les dépendances.
Exemple sous debian/ubuntu :
2) Installer otb :
Rendre otb accessible avec le python fourni par anaconda
À ce stade, tu devrais pouvoir faire marcher otb depuis ton interpréteur python standard :
Puis dans l'interpréteur :
Tu peux notamment voir dans quels répertoire cherche ses modules :
Mais si tu lances juste , conformément à ce qui est retourné par la commande , c'est l'interpréteur d'anaconda qui sera lancé. Et si tu répètes les mêmes commandes, notamment afficher , tu verras qu'il ne cherche pas au mêmes endroits.
Dès lors, deux manières de corriger.
a) Soit tu rajoutes dans les répertoires de modules d'anaconda un lien symbolique vers l'endroit où est stocké otb (c'est ce que suggère la documentation officielle, avec la commande )
b) Soit tu corriges la variable pour garantir qu'elle contient le bon répertoire.
Bonne chance