tags:

views:

82

answers:

1

I have inherited a few Python scripts from someone who has left my employer. Some are meant to be run from Jython, others are not.

I'd like to add them to svn, but before I do I want to modify these files so that if a "requires Jython" file is run from python, the user gets a message like "please run with Jython" and the program exits.

(Warning: I am not very familiar with Python/Jython.)

I expect the simplest way to do this is create a file require-jython.py with the contents like:

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

and then "include/require"? this file (again I'm not an expert. bear with me here)

Can anyone spell out the steps for me?

+3  A: 

What I have seen done is to try to import a module exclusive to a given version or implementation, and raise ImportError if the module does not exist.

Imagine that Jython (and not Python) has a module called special, then you add:

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

Notice that you make the ImportError exception more explicit, as opposed to simply raising it (and lead the user to believe that there was a problem with the module itself, as opposed to informing that the interpreter was improperly selected). I would give you a more concrete example of what module to import, but I am not at all familiar with Jython.

In other words, use duck typing for the module import: assume the import was made correctly but fail as soon as you cannot find the expected behaviour (this is what the try statement is supposed to be used for).

Another way to check the interpreter is to use the sys module (in Python - I don't know if Jython has it):

>>> import sys
>>> print sys.subversion
('CPython', 'tags/r264', '75821M')
Arrieta
Agree, you should not test the interpreter directly, just if the modules you require are available. If you want to inform the user that he is probably using the wrong interpreter, I would prefer using a print and then re-throw the original exception just so in case the user knows what he's doing but forgot to install a module, he knows what's missing.
lkraider
Jython can use java packages. So import java should be sufficient. The special module you are looking for is _java_.
Muhammad Alkarouri
@Arrieta sys.subversion is missing from Jython (or the version I have). It's one of the things I briefly looked into.
z5h