Jython - javaos.getenv()给出“无法获取环境,环境将为空”

时间:2008-10-29 04:20:33

标签: jython

我想知道是否有人遇到过这个问题。每当我在Eclipse中运行任何jython程序时,我在输出的开头都会出现以下错误:

  

“失败了   获得环境,环境将是   空:(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 个答案:

答案 0 :(得分:4)

尝试取消注释并更改“注册表”文件中的操作系统设置

(它与你的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

答案 1 :(得分:2)

有趣。好吧,我似乎在这里找到了相关的代码: http://www.koders.com/python/fid4B7C33153C1427D2CE19CE361EA9519D1652F802.aspx?s=self

如果你向下看,似乎在设置环境命令时,jython认为你的os是posix。你说你正在使用“Windows 2008”。我不确定那是什么。你的意思是Windows Server 2008?如果是这样,它是相当新的,如果你在同一个模块中查看_getOsType函数,它看起来可能对于该模块来说太新了。您可能需要升级到最新版本的jython或Eclipse。但他们很可能还没有发布支持这个操作系统的版本。如果是这种情况,您可能需要向他们报告错误。

答案 2 :(得分:2)

我在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,这解决了我的问题。

答案 3 :(得分:0)

我遇到了同样的错误,使用Windows Vista和Jython 2.5.1,在Eclipse / PyDev下编辑javaos.py,在getOsType的OR语句中包含“Windows Vista”; 我修正了错误。 (我已经在SourceForge的PyDev Tracker下提交了修复程序的错误。)

详细说明:

我安装了完整版的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

答案 4 :(得分:0)

我使用过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