用Python程序执行讨论Python实现基本的框架与结构


执行Python程序的相关过程中时,你会发现你其功能非常简单,例如从1加到10再打印出来而杂File模式,执行Python程序和交互都归在此类。以下就是文章的相关内容的详细介绍。忘你会有所收获。

Python源码分析2 - 一个简单的Python程序执行 收藏
本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构。

要执行Python程序如下,功能非常简单:从1加到10再打印出来

  1. # test program   
  2. sum = 0   
  3. for i in range(1, 11):   
  4. sumsum = sum + i   
  5. print sum   

如果想要在Windows下面用VS 2005调试Python,可以通过下面步骤设置:

把Startup Project设置成Python,这样就可以直接通过F5来启动Python 右键单击Python这个Project,选择Properties。在对话框中的Configuration Properties->Debugging下面,把Command Arguments设置为-d test.py。其中test.py就是我们所要调试程序的名字。-d表示打开调试开关,可以看到额外的调试信息。

好了,设置完毕之后可以直接按下F10来单步追踪该程序的执行了。

首先,F10,启动Python程序,可以看到Python的main函数中没有什么内容,只是简单的调用Py_Main。Py_Main顾名思义自然是主函数了,分几大部分:

分析命令行和环境变量

调用Py_Initialize初始化

根据命令行的内容执行进入不同的执行模式

  1. if (command) {   
  2. sts = PyRun_SimpleStringFlags(command, &cf) != 0;   
  3. free(command);   
  4. } else if (module) {   
  5. sts = RunModule(module);   
  6. free(module);   
  7. }   
  8. else {   
  9. if (filename == NULL && stdin_is_interactive) {   
  10. RunStartupFile(&cf);   
  11. }   
  12. /* XXX */   
  13. sts = PyRun_AnyFileExFlags(   
  14. fp,   
  15. filename == NULL ? "<stdin>" : filename,   
  16. filename != NULL, &cf) != 0;   
  17. }    

从上面的代码可以很容易看出,一共有3种执行方式:

Command模式,执行单条Python语句。通过-c指定。语句内容存放在command变量中。调用PyRun_SimpleStringFlags来执行。

Module模式,执行整个Module。通过-m指定。调用RunModule来执行。

File模式,执行Python程序和交互都归在此类。可以看到,如果未指定文件名并且stdin是交互的话,会执行一个PYTHONSTARTUP所指定的源程序。

评论关闭