代码改变世界

IronPython的第一块鳞片(补充)

2004-09-12 13:16  FantasySoft  阅读(...)  评论(...编辑  收藏

        昨天,带着坚定的决心开始去摸索IronPython身上的每一块鳞片了,而在前一篇post当中有一个最经典的例子——HelloWorld。如果你有尝试着在>>>提示符下敲入所有代码的话,你会发现代码输入至第三行,然后再按回车之后,出现了Exception,以致于无法继续下去。事实上,这样的操作在Python上面是一切OK的,另外一方面,如果你将那几行简单的代码写入一个.py文件(譬如说hello.py),并且通过IronPythonConsole hello.py的方式运行,也是可以看到熟悉的"Hello,World"的。由此可以看出,IronPython在兼容Python方面做得并不是太好,不过她只是0.6版而已,我们完全有理由相信接下去的版本可以做得更好。
        以下是在调用方法上,两者运行结果的比较:
        1、直接在>>>提示符下键入所有代码:IronPython抛出System.Reflection.TargetException: Non-static field requires a target。而Python运行良好;
        2、将代码存为.py(如D:\hello.py),然后在控制台提示符下键入IronPythonCosole D:\hello.py或者python D:\hello.py:两者都运行良好;
        3、进入python或者IronPython的提示符>>>下,进行如下操作:
               >>>import sys
               >>>sys.path.append('D:\\')  
               >>>import hello
        两者都运行良好。通过这样import方式,hello.py的实质就是一个module,在Python下,hello.py会被编译,并且生成hello.pyc文件,而在IronPython下面,则不会有新的文件产生。还有一点需要说明的就是,第二个命令行的作用是将"D:\"加入到module的搜索路径中;同时如果这个命令行改为sys.path.append('D:')在Python下是可以的,但是在IronPython下,import hello会提示无法找到相应的module。
        4、至此,hello.py还不能算是一个完整的程序,因为它没有我们常见的main函数,于是将hello.py扩展为:      

class FantasySoft:
    def hello(self):
        print 
"Hello, world"

if __name__ == '__main__':
     t 
= FantasySoft()
     t.hello()

        在控制台提示符键入python D:\hello.py或者IronPythonCosole D:\hello.py:结果是IronPython抛出IronPython.Objects.PythonSyntaxError: unexpected token <eof> at D:\hello.py。在Python下运行良好。 
      
        PS:对上文红色部分做一些补充说明,准确的说是在.py文件所在的目录下面并没有新的文件生成,但是在bin目录下面,即IronPythonConsole所在的目录,则会有相应的.exe和..pdb文件生成。