2010-09-16 13 views
0

J'ai hérité de quelques scripts Python de quelqu'un qui a quitté mon employeur. Certains sont destinés à être exécutés à partir de Jython, d'autres ne le sont pas. Je voudrais les ajouter à svn, mais avant je veux modifier ces fichiers de sorte que si un fichier "nécessite Jython" est exécuté à partir de python, l'utilisateur reçoit un message comme "s'il vous plaît exécuter avec Jython" et le programme se termine.Comment faire pour échouer rapidement un script python s'il est appelé à partir d'un mauvais interpréteur?

(Attention:. Je ne suis pas très familier avec Python/Jython)

Je me attends à la façon de faire est plus simple de créer un fichier require-jython.py avec le contenu comme:

if runtime.name != 'jython' 
    print "Please run with Jython" 
    exit(1) 

puis " include/require "? ce fichier (encore une fois, je ne suis pas un expert, portez-moi ici)

Quelqu'un peut-il épeler les étapes pour moi?

+0

Pourquoi avez-vous besoin le code à exécuter avec Jython? Quelles sortes de choses se cassent si vous l'exécutez dans un interpréteur différent? –

+0

Le code Jython appelle Java. – z5h

+0

ne pouvez-vous pas le laisser échouer? – nosklo

Répondre

3

Ce que j'ai vu est d'essayer d'importer un module exclusif à une version ou une implémentation donnée, et d'élever ImportError si le module n'existe pas.

Imaginez que Jython (et non Python) a un module appelé special, puis vous ajoutez:

# at the top of your module: 
try: 
    import special 
except ImportError: 
    raise ImportError("this script is meant to be used with Jython") 
else: 
    raise 

Notez que vous faites l'exception ImportError plus explicite, plutôt que de simplement l'élever (et le plomb l'utilisateur de croire qu'il y avait un problème avec le module lui-même, par opposition à informer que l'interprète a été incorrectement sélectionné). Je voudrais vous donner un exemple plus concret du module à importer, mais je ne connais pas du tout Jython. En d'autres termes, utilisez duck typing pour l'import du module: supposons que l'importation a été faite correctement mais échouez dès que vous ne pouvez pas trouver le comportement attendu (c'est ce à quoi l'instruction try est censée être utilisée).

Une autre façon de vérifier l'interprète est d'utiliser le module sys (en Python - Je ne sais pas si Jython l'a):

>>> import sys 
>>> print sys.subversion 
('CPython', 'tags/r264', '75821M') 
+2

D'accord, vous ne devriez pas tester l'interpréteur directement, juste si les modules dont vous avez besoin sont disponibles. Si vous voulez informer l'utilisateur qu'il utilise probablement le mauvais interpréteur, je préférerais utiliser une impression, puis relancer l'exception originale juste au cas où l'utilisateur sait ce qu'il fait mais a oublié d'installer un module, il sait ce qui est disparu. – lkraider

+0

Jython peut utiliser des paquets java.Donc, importer java devrait être suffisant. Le module spécial que vous recherchez est _java_. –

+0

sys.subversion est absent de Jython (ou de la version que j'ai). C'est l'une des choses que j'ai brièvement examinées. – z5h

Questions connexes