最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

從源碼看Blender執(zhí)行外部python文件

2023-07-26 10:50 作者:抓住小豬  | 我要投稿

從文檔中找到去年的一些blender源碼記錄,整一下share出來。以下內(nèi)容來自源碼2.83,具體哪個commit已經(jīng)記不得了。


當不關心Blender源碼時

我們可以使用命令?

[blender_run_path]?--background?--python?[python.py]?--?[python?args]?

在后臺執(zhí)行blender的運行。


blender_run_path?示例:

若blender.exe在Windows目錄?C:\Program?Files\Blender?Foundation\Blender?2.83?下,則

blender_run_path應該為"C:\Program?Files\Blender?Foundation\Blender?2.83\blender"。

只執(zhí)行[blender_run_path]?--background?時,blender會后臺啟動并自動退出,因而在運行blender命令行時,需要指定python的文件,blender后臺運行才能執(zhí)行其python腳本下的操作。cmd命令指示符是可以的,powershell好像有點問題。


blender命令行運行插件

需要import?bpy,之后當引用插件中的某個operator時,輸入?bpy.ops.bl_idname(),即可執(zhí)行插件中的某個operator。


在源碼中是怎么做的呢?

帶著好奇搜尋了一下代碼,發(fā)現(xiàn)在blender中,對于要執(zhí)行的python代碼,是以?c++中使用CPython的接口來執(zhí)行python入口文件。具體的,在做相應上下文初始化、配置等之后,在windows版本中,以PyRun_String的方式來執(zhí)行,而在其他平臺,則以PyRun_File來運行。這部分邏輯位于?source\blender\python\intern\bpy_interface_run.c?中,具體的,都在python_script_exec?函數(shù)數(shù)內(nèi)。

關于在windows中用?PyRun_String?的方式執(zhí)行的原因,官方注釋說是因為python的源碼手冊介紹到?FILE?這個數(shù)據(jù)結構在不同的C語言庫中會有異議,因此他們改用PyRun_String的方式來做。而且,他們傳給python的c++接口的文件,只有被執(zhí)行的帶有主入口的一個python文件。這個python文件中對其他項目的import庫如何被尋找,這個python的入?yún)⒔馕龅鹊?,都交給python本身的c++接口來實現(xiàn),目前看?blender?并沒有直接對這部分內(nèi)容做處理;

除了輸入文件的方式,還可以直接傳入python的字符串內(nèi)容,具體的還是在bpy_interface_run.c?中,blender對字符串解析之后變成一個特殊的buffer,這個buffer通過Py_CompileStringObject?來執(zhí)行。

我們把斷點放在?bpy_interface_run.c?中的?python_script_exec?函數(shù)中,看到整個調(diào)用堆棧相對來說比較簡單。



在這邊,我們把注意力放在堆棧的最開始,也就是下圖所示的blender的主入口處。可以發(fā)現(xiàn),主入口所在的文件,其實就是blender源碼結構中的?blender\source\creator?模塊。?


更具體一些,在?blender\source\creator\creator.c?中的?int?main?函數(shù)。


從源碼看Blender執(zhí)行外部python文件的評論 (共 條)

分享到微博請遵守國家法律
平昌县| 乐都县| 哈密市| 湘潭县| 昔阳县| 互助| 德格县| 郯城县| 桦甸市| 张家川| 临沧市| 日照市| 鹿泉市| 广安市| 潜山县| 朝阳区| 江门市| 清河县| 鹤山市| 龙泉市| 措美县| 长垣县| 台中县| 余干县| 崇信县| 肥东县| 沧州市| 宁津县| 商水县| 皋兰县| 洮南市| 乐昌市| 康乐县| 朔州市| 萍乡市| 巴塘县| 许昌县| 本溪市| 于都县| 连平县| 乐山市|