3

每当我在 Eclipse 中运行任何 jython 程序时,在输出的开头都会出现以下错误:

" 获取环境失败, environ 将为空: (0, 'Failed to execute command ([\'sh\', \'-c\', \'env\']): java.io.IOException: 无法运行程序“sh”:创建进程错误=2,系统找不到指定的文件')

首先,我的环境是:

视窗 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, 'Failed to execute command ([\'sh\', \'-c\', \'env\']): java.io.IOException: Cannot run program "sh": CreateProcess error=2, 系统找不到指定的文件')

这很奇怪,因为我目前使用的是 Windows 机器,而不是 Unix。

4

5 回答 5

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
于 2008-10-29T09:05:12.377 回答
2

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

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

于 2008-10-29T05:16:40.963 回答
2

我在 Windows 7 上运行。我在 Websphere wsadmin 工具中将 Jython 作为脚本运行。我遇到了同样的错误。我将 javaos.py 中的这些行剪切并粘贴到我的脚本中:os 或 sys.registry.getProperty("python.os") 或 \java.lang.System.getProperty("os.name") 并返回“ Windows Vista”。所以我执行了与上面建议的相同的手术,即将 Windows Vista 添加到 javaos.py 并解决了我的问题。

于 2011-02-25T21:20:37.973 回答
0

我遇到了同样的错误,在 Eclipse/PyDev 下使用 Windows Vista 和 Jython 2.5.1 通过编辑 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
于 2010-02-25T17:42:54.877 回答
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
于 2011-12-02T16:22:11.603 回答