Page 1 sur 1

[Résolu] Python3 et Encoding

Publié : 26 mai 2019, 18:03
par darkensen
Bonjour,

Je tente de faire un script autant inutile qu'indispensable :
Faire du TTS de Citation (Kaamelott) quand je rentre dans ma voiture.

Le Python Wikiquote fait le travail de récupération de la quote, jusqu'à la tout va bien, je code mon script python3.
Sauf que quand je le lance dans le plugin Jeedom Script, il n'accepte que du Python3.
J'ai contourné le problème en lançant un bash qui lance mon python3.
Sauf que, d'une, c'est chiant à gérer, d'autre part, j'ai un problème d'encodage dès qu'il y a des accents dans la phrase :
Erreur dans l'exécution du terminal, la valeur retournée est : 1. Détails : Traceback (most recent call last): File "/opt/scripts/Kaamelott-Quote.py", line 6, in print(random.choice(wikiquote.quotes(random.choice(wikiquote.search('Kaamelott',lang='fr')),lang='fr'))) UnicodeEncodeError: 'ascii' codec can't encode character '\xe7' in position 22: ordinal not in range(128)

J'ai essayé les lignes suivantes pour ces deux problèmes dans mon script, pas mieux :
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

Même avec un chmod +x sur le script

Je suis débutant en Jeedom et en script et j'ai beaucoup de mal avec le concept d'encodage..

Edit :
Après quelques recherche, la secodne ligne d'encoding est inutile car Python3 est par défaut en UTF-8
Mon seul problème est donc de lancer le script en python3 directement via le plugin :(

Edit 2 :
Bidouille : J'ai renommé mon fichier en Kaamelott.yolo et en laissant le env en début, je passe en Python3 !
MAIS, j'ai toujours un problème d'encodage :'(
Erreur dans l'exécution du terminal, la valeur retournée est : 1. Détails : Traceback (most recent call last): File "/opt/scripts/Kaamelott-Quote.yolo", line 5, in print(random.choice(wikiquote.quotes(random.choice(wikiquote.search('Kaamelott',lang='fr')),lang='fr'))) UnicodeEncodeError: 'ascii' codec can't encode character '\xea' in position 5: ordinal not in range(128)

Edit 3 :
J'ai changé de tactique, je lance un bloc php dans mon scénario : Nouveau bug : Le message arrive bien sur mon téléphone, uniquement, si le scénario est "Programmé" si je le lance manuellement ou sur un déclencheur, rien ...
HEELP :'(

Question générale, quand est-ce que Jeedom passe au full Python3 ? :)

Que puis-je faire ?

Cordialement.

***** Résolu *****

J'ai fini par avoir sa peau !
Voici mon script :

#!/usr/bin/env python3
# coding: utf8
import wikiquote
import random
#print("Test")
Quote = random.choice(wikiquote.quotes(random.choice(wikiquote.search('Kaamelott',lang='fr')),lang='fr'))
print(Quote.encode('ascii','xmlcharrefreplace'))

Et voici le "Bloc PHP"

$output=shell_exec('python3 Kaamelott-Quote.py 2>&1');
$output = ltrim($output, "b");
$scenario->setData('Quote', $output);

Re: [Résolu] Python3 et Encoding

Publié : 22 sept. 2019, 21:23
par PhilippeLc
Bonjour,
je tente d’utiliser votre solution avec votre appel CODE BLOCK php mais cela ne fonctionne pas : les accents restent illisible pour GoogleCast :
Pourriez vous m'aider à comprendre ce problème d'encoding car j'ai le même problème pas ailleurs pour d'autres python3 ?
------------------------------------
[2019-09-22 21:18:39][SCENARIO] Start : Scenario lance manuellement.
[2019-09-22 21:18:39][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-09-22 21:18:39][SCENARIO] Exécution d'un bloc code
[2019-09-22 21:18:41][SCENARIO] Exécution du sous-élément de type [action] : action
[2019-09-22 21:18:42][SCENARIO] Exécution de la commande [GoogleCast][Salon Google Home][Parle !] avec comme option(s) : {"background":"0","title":"","message":"cmd=tts|value=Quand il a ouvert le ventre du troll, j'ai reçu un jet d'acide qui m'a pratiquement acidifié!
"}
[2019-09-22 21:18:42][SCENARIO] Fin correcte du scénario