Jython, отсутствующие функции в модуле sys

#java #python

#java #python

Вопрос:

У меня есть скрипт на Python, который мне нужно запустить в моем Java-приложении. Я пытался выполнить это из jython, но у меня странная проблема:

from sys import getdlopenflags

Я получаю:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name getdlopenflags

Когда я пытаюсь проверить содержимое sys:

import sys

dir(sys)

вывод таков:

['JYTHON_DEV_JAR', 'JYTHON_JAR', 'PYTHON_CACHEDIR', 'PYTHON_CACHEDIR_SKIP', 'PYTHON_CONSOLE_ENCODING', '__delattr__', '__dict__', '__displayhook__', '__excepthook__', '__findattr_ex__', '__name__', '__new__', '__rawdir__', '__setattr__', '__stderr__', '__stdin__', '__stdout__', '_getframe', '_jy_interpreter', '_systemRestart', 'add_classdir', 'add_extdir', 'add_package', 'argv', 'builtin_module_names', 'builtins', 'byteorder', 'classDictInit', 'classLoader', 'cleanup', 'copyright', 'currentWorkingDir', 'defaultencoding', 'determinePlatform', 'displayhook', 'doInitialize', 'exc_clear', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'filesystemencoding', 'getBaseProperties', 'getBuiltin', 'getBuiltins', 'getClassLoader', 'getCurrentWorkingDir', 'getDefaultBuiltins', 'getPath', 'getPathLazy', 'getPlatform', 'getWarnoptions', 'getdefaultencoding', 'getfilesystemencoding', 'getrecursionlimit', 'hexversion', 'initialize', 'isPackageCacheEnabled', 'last_traceback', 'last_type', 'last_value', 'maxint', 'maxunicode', 'meta_path', 'minint', 'modules', 'packageManager', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'recursionlimit', 'registerCloser', 'registry', 'setBuiltins', 'setClassLoader', 'setCurrentWorkingDir', 'setPlatform', 'setWarnoptions', 'setprofile', 'setrecursionlimit', 'settrace', 'shadow', 'stderr', 'stdin', 'stdout', 'subversion', 'toString', 'unregisterCloser', 'version', 'version_info', 'warnoptions']

очевидно, что getdlopenflags отсутствует. Возможно ли использовать эту функцию в jython (у меня новейшая версия — 2.5.2) в соответствии с документацией на http://jython.org/docs/library/sys.html присутствует sys.getdlopenflags.

Спасибо за помощь

Ответ №1:

В документации указано «Доступность: Unix». Документы Jython, похоже, скопировали это без изменений из документов CPython. Таким образом, эта функция доступна только при установке Unix. Возможно, в Jython этого вообще нет — я недостаточно хорошо знаю Java, но поскольку он предположительно не зависит от платформы, он не может поддерживать системные функции.

Комментарии:

1. Java представляет собой отдельную платформу для Python (фактически, os.name возвращает «Java» в Jython, я думаю), и getdlopenflags, в частности, не имеет смысла в контексте платформы Java — нет вызова «dlopen».