[Résolu] Python3 et Encoding
Publié : 26 mai 2019, 18:03
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);
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);