用Python程序執(zhí)行討論Python實現(xiàn)基本的框架與結(jié)構(gòu)
執(zhí)行Python程序的相關(guān)過程中時,你會發(fā)現(xiàn)你其功能非常簡單,例如從1加到10再打印出來而雜File模式,執(zhí)行Python程序和交互都歸在此類。以下就是文章的相關(guān)內(nèi)容的詳細介紹。忘你會有所收獲。
Python源碼分析2 - 一個簡單的Python程序執(zhí)行 收藏
本文主要通過跟蹤一個非常簡單的Python程序的執(zhí)行,簡單討論Python實現(xiàn)的基本框架和結(jié)構(gòu)。
要執(zhí)行Python程序如下,功能非常簡單:從1加到10再打印出來
- # test program
- sum = 0
- for i in range(1, 11):
- sumsum = sum + i
- print sum
如果想要在Windows下面用VS 2005調(diào)試Python,可以通過下面步驟設(shè)置:
把Startup Project設(shè)置成Python,這樣就可以直接通過F5來啟動Python 右鍵單擊Python這個Project,選擇Properties。在對話框中的Configuration Properties->Debugging下面,把Command Arguments設(shè)置為-d test.py。其中test.py就是我們所要調(diào)試程序的名字。-d表示打開調(diào)試開關(guān),可以看到額外的調(diào)試信息。
好了,設(shè)置完畢之后可以直接按下F10來單步追蹤該程序的執(zhí)行了。
首先,F(xiàn)10,啟動Python程序,可以看到Python的main函數(shù)中沒有什么內(nèi)容,只是簡單的調(diào)用Py_Main。Py_Main顧名思義自然是主函數(shù)了,分幾大部分:
分析命令行和環(huán)境變量
調(diào)用Py_Initialize初始化
根據(jù)命令行的內(nèi)容執(zhí)行進入不同的執(zhí)行模式
- 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種執(zhí)行方式:
Command模式,執(zhí)行單條Python語句。通過-c指定。語句內(nèi)容存放在command變量中。調(diào)用PyRun_SimpleStringFlags來執(zhí)行。
Module模式,執(zhí)行整個Module。通過-m指定。調(diào)用RunModule來執(zhí)行。
File模式,執(zhí)行Python程序和交互都歸在此類??梢钥吹剑绻粗付ㄎ募⑶襰tdin是交互的話,會執(zhí)行一個PYTHONSTARTUP所指定的源程序。
【編輯推薦】