Как быстро завершить работу скрипта Python, если он вызван не тем интерпретатором? - PullRequest
0 голосов
/ 16 сентября 2010

Я унаследовал несколько скриптов Python от кого-то, кто оставил моего работодателя. Некоторые предназначены для запуска из Jython, другие нет.

Я бы хотел добавить их в svn, но перед тем как я хочу изменить эти файлы, чтобы, если файл «требует Jython» запускался из python, пользователь получил сообщение типа «пожалуйста, запустите с Jython» и программа выходит.

(Предупреждение: я не очень знаком с Python / Jython.)

Я ожидаю, что самый простой способ сделать это - создать файл require-jython.py со следующим содержимым:

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

а потом "включать / требовать"? этот файл (опять же я не эксперт. терпите меня здесь)

Может кто-нибудь объяснить мне шаги?

1 Ответ

3 голосов
/ 16 сентября 2010

Что я видел, так это попытался импортировать модуль исключительно для данной версии или реализации и вызвать ImportError, если модуль не существует.

Представьте, что Jython (, а не Python ) имеет модуль с именем special, затем добавьте:

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

Обратите внимание, что вы делаете исключение ImportError более явным, а не просто повышаете его (и заставляете пользователя думать, что возникла проблема с самим модулем, в отличие от сообщения о том, что интерпретатор был неправильно выбран). Я бы дал вам более конкретный пример того, какой модуль импортировать, но я совсем не знаком с Jython.

Другими словами, используйте duck, набрав для импорта модуля: предположим, что импорт был выполнен правильно, но произойдет сбой, как только вы не сможете найти ожидаемое поведение (это то, что предполагается для оператора try быть использованы для).

Другой способ проверить интерпретатор - использовать модуль sys (в Python - я не знаю, есть ли в Jython):

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