[英]How to access a Python global variable from C?
我在Python腳本中有一些全局變量。 該腳本中的一些函數調用C - 是否可以在C中設置其中一個變量,如果是,如何?
我很欣賞這首先不是一個非常好的設計,但我需要對現有代碼進行一些小改動,我不想對現有腳本進行重大的重構。
我不是一個蟒蛇大師,但我發現這個問題很有趣所以我google了一下。 這是“python嵌入API”的第一個熱門 - 它有幫助嗎?
如果屬性屬於模塊的全局范圍,則可以使用“PyImport_AddModule”來獲取模塊對象的句柄。 例如,如果要在名為“foobar”的主模塊中獲取整數的值,則執行以下操作:
PyObject *m = PyImport_AddModule("__main__"); PyObject *v = PyObject_GetAttrString(m,"foobar"); int foobar = PyInt_AsLong(v); Py_DECREF(v);
對於來自谷歌的任何人來說,這是直接的方法:
PyObject* PyEval_GetGlobals()
https://docs.python.org/2/c-api/reflection.html
https://docs.python.org/3/c-api/reflection.html
返回值作為字典訪問。
我建議使用pyrex
創建一個擴展模塊,你可以將值存儲在python中,並cdef一堆函數,可以從C調用它們返回值。
否則,很大程度上取決於您嘗試傳輸的值的類型。
您是否願意稍微修改API?
您可以使C函數返回全局的新值,然后像這樣調用它:
my_global = my_c_func(...)
如果您直接使用Robin或Python C API,則可以將全局字典作為附加參數傳遞並進行修改
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.