2008-11-12 2 views
6

У меня есть некоторые глобальные переменные в скрипте Python. Некоторые функции в этом вызове скрипта на C - можно ли установить одну из этих переменных в C, и если да, то как?Как получить доступ к глобальной переменной Python из C?

Я ценю, что это не очень хороший дизайн в первую очередь, но мне нужно внести небольшое изменение в существующий код, я не хочу приступать к крупному рефакторингу существующих скриптов.

ответ

11

Я не гуру-питон, но я нашел этот вопрос интересным, поэтому я искал googled. This был первым хитом на «API встраивания python» - это помогает?

Если атрибуты относятся к глобальному объему модуля, то вы можете использовать «PyImport_AddModule», чтобы получить дескриптор к объекту модуля. Например, если вы хотите, чтобы получить значение в целого модуля в основного имени «Foobar», вы могли бы сделать следующее:

PyObject *m = PyImport_AddModule("__main__"); 
PyObject *v = PyObject_GetAttrString(m,"foobar"); 

int foobar = PyInt_AsLong(v); 

Py_DECREF(v); 
+0

«Это» ссылка нарушена - у кого есть фиксированная ссылка? – leecbaker 2011-04-15 06:52:19

0

Я рекомендую использовать pyrex, чтобы сделать расширение модуль вы можете сохранить значения в python и cdef кучу функций, которые можно вызвать из C, чтобы вернуть туда значения.

В противном случае многое зависит от типа значений, которые вы пытаетесь передать.

0

Желаете ли вы изменить API немного?

  • Вы можете сделать функцию C вернуть новое значение для глобального, а затем вызвать его так:

    my_global = my_c_func(...)

  • Если вы используете Robin или API Python C напрямую , вы можете передать словарь глобалов в качестве дополнительного параметра и изменить его.

  • Если ваш глобальный сервер всегда находится в том же модуле, решение Sherm отлично выглядит
Смежные вопросы