Jython - javaos.getenv() выдает “Не удалось получить среду, среда будет пустой”

StackOverflow https://stackoverflow.com/questions/245787

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Windows 2008

JDK 1.6.0u10

jython 2.2.1

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

C:\jython2.2.1 >java - jar - файл jython.jar

импорт javaos

вывести javaos.getenv("user.name ")

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

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

Заранее благодарю вас.

Это было полезно?

Решение

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

(он находится в том же каталоге, что и ваш 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

Другие советы

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

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

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

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

Подробные сведения:

Я установил полную версию Jython, и это не помогло.Я также попытался отредактировать файл "registry" в дереве 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

Я использовал этот хак из блога 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top