variable stringvar requests peticiones libreria hacer example enviar ejemplos con python cython

stringvar - ¿Cómo se puede exponer un valor de C#definido a Python en un módulo Cython?



stringvar tkinter python 3 (1)

Me gustaría hacer las constantes enteras (ACTIVE_TAG, etc.) definidas aquí :

//island management, m_activationState1 #define ACTIVE_TAG 1 #define ISLAND_SLEEPING 2 #define WANTS_DEACTIVATION 3 #define DISABLE_DEACTIVATION 4 #define DISABLE_SIMULATION 5

disponible como atributos normales de un módulo definido por Cython en el que estoy trabajando, para que el código de la aplicación Python pueda acceder a ellos (para pasarlos a las API envueltas que se definen en términos de ellos).

He analizado la definición de estos con cdef como enteros o enumeraciones, pero ninguno de estos enfoques en realidad une el valor a un atributo en el módulo de Cython. ¿Qué otras opciones hay?


Aquí hay una forma que, aunque parezca tediosa, podría ser automatizada para cualquier archivo .h dado como entrada:

Paso 1. Obtenga todas las constantes que desee en un archivo, por ejemplo, bulletdefs.h , que tiene #defines pero con guiones bajos, por ejemplo:

#define _ACTIVE_TAG 1 #define _ISLAND_SLEEPING 2 #define _WANTS_DEACTIVATION 3 #define _DISABLE_DEACTIVATION 4 #define _DISABLE_SIMULATION 5

Paso 2. Inserte una sección en el archivo bullet.pyx para su módulo, digamos bullet.pyx :

cdef extern from "bulletdefs.h": cdef int _ACTIVE_TAG cdef int _ISLAND_SLEEPING cdef int _WANTS_DEACTIVATION cdef int _DISABLE_DEACTIVATION cdef int _DISABLE_SIMULATION ACTIVE_TAG = _ACTIVE_TAG ISLAND_SLEEPING = _ISLAND_SLEEPING WANTS_DEACTIVATION = _WANTS_DEACTIVATION DISABLE_DEACTIVATION = _DISABLE_DEACTIVATION DISABLE_SIMULATION = _DISABLE_SIMULATION

Luego, cuando compile su módulo, debe obtener el efecto deseado:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import bullet >>> bullet.ACTIVE_TAG 1 >>> bullet.DISABLE_SIMULATION 5 >>>