π
<-
Chat plein-écran
[^]

Détection plateforme en Python

Discussions scientifiques et scolaires

Détection plateforme en Python

Message non lude critor » 15 Déc 2018, 18:57

Les consoles Python de nos calculatrices graphiques n'ont ni les mêmes dimensions ni les mêmes comportements.

Pour faire du code produisant un affichage correct sur tous les modèles, on peut avoir besoin de détecter la plateforme sur laquelle on tourne.

En voici un très fiable en se basant sur les modules disponibles :
Code: Tout sélectionner
#platforms: (0)TI-Nspire (1)NumWorks (2)Graph 90+E (3)Graph 75+E (4)TI-Python
try:
  import sys
  try:
    if sys.platform=='nspire': platform=0
    if sys.platform=='TI-Python Adapter': platform=4
  except: platform=3
except:
  try:
    import kandinsky
    platform=1
  except:
    platform=2


Maintenant pour les inconvénients :
  • ce n'est pas une fonction
  • ce code ne détecte pas les plateformes HP Prime ou KhiCAS/Graph 90+E
  • si je déplace les import dans des fonctions, ces deux dernières plateformes râlent (erreur de syntaxe)
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41494
Images: 14626
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Détection plateforme en Python

Message non lude ~ThinkingSpace~ » 15 Déc 2018, 19:06

euh... le langage HP Prime c'est pas vraiment du Python non ?
Nous sommes tous des pommes de pin.
Avatar de l’utilisateur
~ThinkingSpace~
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 7.4%
 
Messages: 85
Inscription: 08 Déc 2018, 12:06
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: DL Math-Info
YouTube: ThinkingSpace

Re: Détection plateforme en Python

Message non lude critor » 15 Déc 2018, 19:10

La HP Prime gère une écriture Python.
Ce n'est certes pas du Python, mais c'est de mieux en mieux. :)

Donc si on peut la détecter pour que nos scripts tiennent compte du comportement très différent de sa console, ce sera bien. :)
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41494
Images: 14626
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Détection plateforme en Python

Message non lude critor » 15 Déc 2018, 21:33

Voilà, une autre méthode sous forme de fonction sans aucune importation de module, et qui cette fois-ci gère bien les HP Prime et KhiCAS/Graph 90+E :
Code: Tout sélectionner
#0= MicroPython / TI-Nspire
#1= MicroPython / NumWorks
#2= MicroPython / Graph 90+E
#3= MicroPython / Graph 35/75+E
#4= CircuitPython / TI-Python
#5= Xcas / HP Prime
#6= KhiCAS / Graph 90+E
def getplatform():
  r=-1
  try:
    if chr(256)==chr(0):
      r=5+(not ("HP" in version()))
    else:
      r=4*(len(str(1/3))<18)
  except:
    try:
      bytearray
      r=3
    except:
      try:
        enumerate
        r=1
      except:
        r=2
  return r

Devra possiblement être corrigée si des mises à jour induisent des changements de comportements.

Testé sur toutes les plateformes, sauf le module TI-Python que je n'ai pas. Mais comme ils n'ont apparemment toujours pas corrigé la précision des flottants, ça devrait marcher.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41494
Images: 14626
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Détection plateforme en Python

Message non lude Lionel Debroux » 15 Déc 2018, 21:53

Waouh... bon travail. La détection de modèle est typiquement le genre de choses qu'on peut souhaiter voir les fabricants d'implémentations Python (ou pseudo-Python) s'entendre pour fournir de manière commune, standardisée.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Détection plateforme en Python

Message non lude critor » 15 Déc 2018, 22:05

Merci. :)

Un même code Python pourra maintenant tenir compte des subtilités propres à chaque plateforme.
Peut-être donc que pour un futur concours utilisant un programme Python, je n'aurai plus besoin de faire X versions différentes. :)
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41494
Images: 14626
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Détection plateforme en Python

Message non lude critor » 15 Déc 2018, 22:18

Un problème que j'ai remarqué sur KhiCAS et HP Prime lors de mes diverses tentatives, mais j'ignore la complexité de sa correction.

Les fonctions de chaîne considèrent systématiquement le caractère nul comme une fin de chaîne, ce qui est certes valable en C mais faux en Python :
Image
De plus, ici on obtient un index au lieu d'un booléen.
Au lieu de 2, 0, 0, on aurait dû obtenir True, True, True.

Image
Là de même, au lieu de 1, -1, -1, on attendait 1, 2, 3.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41494
Images: 14626
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Détection plateforme en Python

Message non lude jean-baptiste boric » 15 Déc 2018, 22:33

Ça me fait penser qu'il faudra rajouter un module sys (même s'il ne contiendrait que la variable platform dans un premier temps) du côté de NumWorks à l'occasion. Avec la prolifération des implémentations Python sur calculette de nos jours, ça ne serait pas de refus.
Avatar de l’utilisateur
jean-baptiste boricPremium
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Prochain niv.: 4.5%
 
Messages: 374
Inscription: 21 Déc 2015, 22:22
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
GitHub: boricj

Re: Détection plateforme en Python

Message non lude critor » 15 Déc 2018, 22:49

Le module sys, on l'a déjà sur Graph 35/75+E ainsi que sur le TI-Python. :)

Ce serait très pratique/fiable et c'est bien ce que j'utilisais au départ sur ces deux plateformes.

Mais malheureusement sur HP Prime et KhiCAS/Graph 90+E, la présence d'un import dans une fonction génère une erreur dès le chargement du script. :(
Il suffirait juste de l'ignorer.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41494
Images: 14626
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Détection plateforme en Python

Message non lude parisse » 16 Déc 2018, 10:35

Merci pour l'info. Je viens de faire la correction pour import dans une fonction. Il manquait les espaces du debut dans la traduction (il ne suffit pas d'ignorer, car certains import se traduisent en des assignations de variables pour que la commande Python native soit traduite en son equivalent Xcas) ce qui evidemment posait probleme avec l'indentation.
La version Casio est mise a jour sur mon site, pour HP je ne sais pas du tout quand ce sera integre.

Pour les \0 dans des chaines, desole, mais ce n'est pas corrigeable, les chaines de Xcas utilisent des string C++ et des chaines C et tout la librairie C considere \0 comme une fin de chaine.

Sinon, quand vous detectez un probleme de ce type, ce serait bien de le mettre dans une section du forum que je suis susceptible de consulter (par ex. HP ou Casio ou News), la je l'ai vraiment vu par hasard (en principe je ne regarde pas Divers, la je l'ai regarde a cause du topic PDM calculatrices graphiques).
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.8%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Suivante

Retourner vers Maths, physique, informatique et autre...

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 18 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1242 utilisateurs:
>1206 invités
>31 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)
cron