valor usuario teclado solicitar raw_input numero introducir datos como comando capturar python c unit-testing swig

usuario - python input()



La forma más fácil de probar el código C con Python (2)

El uso de ctypes sería mi primer instinto, aunque debo admitir que si estuviera probando un código C que no iba a ser interconectado desde Python en primer lugar, solo usaría el check . check tiene la gran ventaja de poder informar correctamente los casos de prueba que segfault. Esto se debe a que ejecuta cada caso de prueba en un proceso separado.

Ahora, si usted va a crear una envoltura de python para el código C de todos modos, simplemente probaré la envoltura. Además de los métodos que mencionó anteriormente, también puede usar Cython para escribir un envoltorio de este tipo con código similar a python y luego probarlo desde Python.

Tengo un montón de código C que me gustaría probar por unidad usando la biblioteca de pruebas de unidad de Python (en Windows), pero estoy tratando de encontrar la mejor manera de interconectar el código C para que Python pueda ejecutarlo (y recuperar los resultados). ¿Alguien tiene alguna experiencia en la forma más fácil de hacerlo?

Algunas ideas incluyen:

  • Ajustar el código como una extensión de Python C utilizando la API de Python
  • Envuelva el código C usando SWIG
  • Agregue un contenedor DLL al código C y cárguelo en Python usando ctypes
  • Agregue un pequeño servidor XML-RPC al código c y llámelo utilizando xmlrpclib (sí, sé que esto parece un poco exagerado)

¿Hay una forma canónica de hacer esto? Voy a hacer esto bastante, con diferentes módulos de C, por lo que me gustaría encontrar una manera que sea menos esfuerzo.


Creo que la solución exacta depende de su código. No todas las bibliotecas son fácilmente adecuadas para ajustarse como DLL. Si es así, entonces ctypes es sin duda la forma más fácil: simplemente haga un DLL de su biblioteca y luego ctypes con ctypes . Una ventaja adicional es que ahora tiene su biblioteca convenientemente envuelta como una DLL independiente que ayuda a desacoplar su aplicación.

Sin embargo, a veces, se requerirá una interacción más completa entre su código C y el código Python de prueba. Entonces, probablemente sea mejor engancharlo como una extensión, para lo cual SWIG es una herramienta bastante buena que automatizará la mayoría de las cosas que encontrará aburridas sobre el proceso.