我想知道是否有人遇到过这个问题。每当我在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机器。任何解决方案/想法?
提前谢谢。
答案 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