执行Python程序的相关过程中时,你会发现你其功能非常简单,例如从1加到10再打印出来而杂File模式,执行Python程序和交互都归在此类。以下就是文章的相关内容的详细介绍。忘你会有所收获。
Python源码分析2 - 一个简单的Python程序执行 收藏
本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构。
要执行Python程序如下,功能非常简单:从1加到10再打印出来
- # test program
- sum = 0
- for i in range(1, 11):
- sumsum = sum + i
- 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初始化
根据命令行的内容执行进入不同的执行模式
- if (command) {
- sts = PyRun_SimpleStringFlags(command, &cf) != 0;
- free(command);
- } else if (module) {
- sts = RunModule(module);
- free(module);
- }
- else {
- if (filename == NULL && stdin_is_interactive) {
- RunStartupFile(&cf);
- }
- /* XXX */
- sts = PyRun_AnyFileExFlags(
- fp,
- filename == NULL ? "<stdin>" : filename,
- filename != NULL, &cf) != 0;
- }
从上面的代码可以很容易看出,一共有3种执行方式:
Command模式,执行单条Python语句。通过-c指定。语句内容存放在command变量中。调用PyRun_SimpleStringFlags来执行。
Module模式,执行整个Module。通过-m指定。调用RunModule来执行。
File模式,执行Python程序和交互都归在此类。可以看到,如果未指定文件名并且stdin是交互的话,会执行一个PYTHONSTARTUP所指定的源程序。
【编辑推荐】