簡體   English   中英

如何從C訪問Python全局變量?

[英]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,則可以將全局字典作為附加參數傳遞並進行修改

  • 如果您的全局總是在同一個模塊中,那么Sherm的解決方案看起來很棒

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM