tags:

views:

1160

answers:

3

I'm wondering if anyone ran into this problem. Whenever I run any jython program in Eclipse, I got the following error in the beginning of the output:

" Failed to get environment, environ will be empty: (0, 'Failed to execute command ([\'sh\', \'-c\', \'env\']): java.io.IOException: Cannot run program "sh": Crea teProcess error=2, The system cannot find the file specified')

First, my environment is:

Windows 2008

JDK 1.6.0u10

jython 2.2.1

I did some digging, and I realized that this message is produced in the function javaos.getenv(). Whenever I call the javaos.getenv() function, it throws the following error:

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

import javaos

print javaos.getenv("user.name")

Failed to get environment, environ will be empty: (0, 'Failed to execute command ([\'sh\', \'-c\', \'env\']): java.io.IOException: Cannot run program "sh": Crea teProcess error=2, The system cannot find the file specified')

This is strange, because I'm currently using a Windows machine, not an Unix. Any solutions/ideas?

Thank you in advance.

A: 

Interesting. Well, I seem to have found the relevant code here: http://www.koders.com/python/fid4B7C33153C1427D2CE19CE361EA9519D1652F802.aspx?s=self

If you look towards the bottom, it seems when setting the environment command jython thinks your os is posix. You say you're using "Windows 2008". I'm not sure what that is. Do you mean Windows Server 2008? If so, it's quite new and if you look at the _getOsType function in the same module, it looks like it might be too new for that module. You may need to upgrade to the most recent version of jython or Eclipse. But it's quite possible they haven't yet released a version that supports this OS. If that's the case, you may need to just report the bug to them.

Thanks. I filed the bug related to this issue at http://bugs.jython.org/issue1162 . Thank you for your support.
jeeyoungk
+1  A: 

Try to uncomment and change the os setting in the 'registry' file

(it is in the same directory as your jython.jar / i hope)

# 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
Blauohr
Thank you. I never knew that you can have a registry file along with the jar file! I was just using the lone jython.jar file until now.
jeeyoungk
A: 

I ran into the same error, using Windows Vista, and Jython 2.5.1, under Eclipse/PyDev By editing javaos.py, to include "Windows Vista" in the OR statement in getOsType,; I fixed the error. (I've filed a bug with the fix under the PyDev Tracker at SourceForge.)

Details:

I installed the full version of Jython, and that did not help. I also tried editing the "registry" file in the Jython tree. That did not help either.

Then I looked at the files in:

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

to find "javaos.py" and added a bit of code to read:

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
deeeptext