Jython - javaos.getenv () выдает «Не удалось получить среду, среда будет пустой» - PullRequest
3 голосов
/ 29 октября 2008

Мне интересно, сталкивался ли кто-нибудь с этой проблемой. Всякий раз, когда я запускаю любую программу jython в Eclipse, я получаю следующую ошибку в начале вывода:

"Не удалось получить среду, среда будет пусто: (0, 'Не удалось выполнить команду ([\ 'sh \', \ '- c \', \ 'env \']): java.io.IOException: не удается запустить программа "sh": Crea teProcess error = 2, Система не может найти файл указано ')

Во-первых, мое окружение:

Windows 2008

JDK 1.6.0u10

jython 2.2.1

Я немного покопался и понял, что это сообщение выдается в функции javaos.getenv (). Всякий раз, когда я вызываю функцию javaos.getenv (), она выдает следующую ошибку:

C: \ jython2.2.1> java -jar jython.jar

импорт javaos

print javaos.getenv ("user.name")

Не удалось получить среду, среду будет пустым: (0, «Не удалось выполнить» команда ([\ 'sh \', \ '- c \', \ 'env \']): java.io.IOException: не удается запустить программа "sh": Crea teProcess error = 2, Система не может найти файл указано ')

Это странно, потому что я сейчас использую компьютер с Windows, а не Unix. Любые решения / идеи?

Заранее спасибо.

Ответы [ 5 ]

4 голосов
/ 29 октября 2008

Попробуйте раскомментировать и изменить настройку os в файле реестра

(он находится в том же каталоге, что и ваш jython.jar / я надеюсь)

# python.os determines operating-specific features, similar to and overriding the
# Java property "os.name".
# Some generic values are also supported: 'nt', 'ce' and 'posix'.
# Uncomment the following line for the most generic OS behavior available.
#python.os=None
python.os=nt
# try nt or dos
2 голосов
/ 26 февраля 2011

Я работаю на Windows 7. Я запускаю Jython как скрипт в инструменте Websphere wsadmin. Я столкнулся с этой же ошибкой. Я вырезал эти строки из javaos.py в свой скрипт: os или sys.registry.getProperty ("python.os") или \ java.lang.System.getProperty ("os.name") и вернулся «Windows Vista». Таким образом, я выполнил ту же операцию, как предложено выше, то есть добавил Windows Vista в javaos.py, и это решило мою проблему.

2 голосов
/ 29 октября 2008

Интересно. Ну, я, кажется, нашел соответствующий код здесь: http://www.koders.com/python/fid4B7C33153C1427D2CE19CE361EA9519D1652F802.aspx?s=self

Если вы посмотрите вниз, при настройке среды команда jython думает, что ваш os - posix. Вы говорите, что используете «Windows 2008». Я не уверен, что это такое. Вы имеете в виду Windows Server 2008? Если это так, то это довольно новое, и если вы посмотрите на функцию _getOsType в том же модуле, похоже, что она может быть слишком новой для этого модуля. Вам может потребоваться обновить до последней версии Jython или Eclipse. Но вполне возможно, что они еще не выпустили версию, которая поддерживает эту ОС. Если это так, вам, возможно, придется просто сообщить об ошибке им.

0 голосов
/ 02 декабря 2011

Я использовал этот хак из блога Dave Brands: http://dbrand666.wordpress.com/2010/04/08/fix1/

try:
    import javaos
    if javaos._osType == 'posix' and \
            java.lang.System.getProperty('os.name').startswith('Windows'):
        sys.registry.setProperty('python.os', 'nt')
        reload(javaos)
except:
    pass
0 голосов
/ 25 февраля 2010

Я столкнулся с той же ошибкой, используя Windows Vista и Jython 2.5.1, в Eclipse / PyDev. Отредактировав javaos.py, добавьте «Windows Vista» в оператор OR в getOsType; Я исправил ошибку. (Я исправил ошибку в PyDev Tracker на SourceForge.)

подробности:

Я установил полную версию Jython, и это не помогло. Я также попытался отредактировать файл реестра в дереве Jython. Это тоже не помогло.

Тогда я посмотрел на файлы в:

C:\eclipse-platform-3.5-win32\eclipse\plugins\org.python.pydev.jython_1.4.8.2881\Lib

чтобы найти "javaos.py" и добавил немного кода для чтения:

def _getOsType( os=None ):
   os = os or sys.registry.getProperty( "python.os" ) or \
               java.lang.System.getProperty( "os.name" )

_osTypeMap = (
    ( "nt", r"(nt)|(Windows NT)|(Windows NT 4.0)|(WindowsNT)|"
            r"(Windows 2000)|(Windows XP)|(Windows CE)|(Windows Vista)" ),
    ( "dos", r"(dos)|(Windows 95)|(Windows 98)|(Windows ME)" ),
    ( "mac", r"(mac)|(MacOS.*)|(Darwin)" ),
    ( "None", r"(None)" ),
    ( "posix", r"(.*)" ), # default - posix seems to vary mast widely
    )
for osType, pattern in _osTypeMap:
    if re.match( pattern, os ):
        break
return osType
...