用Python程序執(zhí)行討論P(yáng)ython實(shí)現(xiàn)基本的框架與結(jié)構(gòu)
執(zhí)行Python程序的相關(guān)過程中時(shí),你會(huì)發(fā)現(xiàn)你其功能非常簡(jiǎn)單,例如從1加到10再打印出來而雜File模式,執(zhí)行Python程序和交互都?xì)w在此類。以下就是文章的相關(guān)內(nèi)容的詳細(xì)介紹。忘你會(huì)有所收獲。
Python源碼分析2 - 一個(gè)簡(jiǎn)單的Python程序執(zhí)行 收藏
本文主要通過跟蹤一個(gè)非常簡(jiǎn)單的Python程序的執(zhí)行,簡(jiǎn)單討論P(yáng)ython實(shí)現(xiàn)的基本框架和結(jié)構(gòu)。
要執(zhí)行Python程序如下,功能非常簡(jiǎn)單:從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來啟動(dòng)Python 右鍵單擊Python這個(gè)Project,選擇Properties。在對(duì)話框中的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,啟動(dòng)Python程序,可以看到Python的main函數(shù)中沒有什么內(nèi)容,只是簡(jiǎn)單的調(diào)用Py_Main。Py_Main顧名思義自然是主函數(shù)了,分幾大部分:
分析命令行和環(huán)境變量
調(diào)用Py_Initialize初始化
根據(jù)命令行的內(nèi)容執(zhí)行進(jìn)入不同的執(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í)行整個(gè)Module。通過-m指定。調(diào)用RunModule來執(zhí)行。
File模式,執(zhí)行Python程序和交互都?xì)w在此類??梢钥吹?,如果未指定文件名并且stdin是交互的話,會(huì)執(zhí)行一個(gè)PYTHONSTARTUP所指定的源程序。
【編輯推薦】