Para los mensajes de depuración detallada en mi aplicación, estoy usando una función que devuelve un prefijo útil. Consideremos el siguiente ejemplo:Python: obtenga el nombre completo del módulo del paquete
import inspect
def get_verbose_prefix():
"""Returns an informative prefix for verbose debug output messages"""
s = inspect.stack()
module_name = inspect.getmodulename(s[1][1])
func_name = s[1][3]
return '%s->%s' % (module_name, func_name)
def awesome_function_name():
print "%s: Doing some awesome stuff right here" % get_verbose_prefix()
if __name__ == '__main__':
awesome_function_name()
Este salidas:
test->awesome_function_name: Doing some awesome stuff right here
Mi problema es: Cuando tengo un módulo en un paquete, por ejemplo 'myproject.utilities.input', el nombre del módulo devuelto desde get_verbose_prefix
sigue siendo solo 'entrada', no 'myproject.utilities.input'. Esto reduce drásticamente la utilidad del prefijo en proyectos grandes cuando puede haber varios módulos de "entrada" en diferentes submódulos, todos trabajando juntos.
Así que mi pregunta es: ¿Hay una manera simple de recuperar el nombre completo del módulo dentro de su paquete en Python? Estoy planeando expandir la función get_verbose_prefix
para buscar archivos '__init__.py' en los directorios principales del módulo para extrapolar su nombre completo, pero primero me gustaría saber si hay una manera más fácil de hacerlo.
supongo que eso es cierto, pero ¿cómo consigo al módulo real de la contexto de mi función de prefijo? – Hubro
No importa, me di cuenta de eso: 'inspeccionar.getmodule (s [1] [0]) .__ name__'. También debe editar en que '__name__' en realidad no siempre devuelve el nombre completo del módulo, ya que devuelve' __main__' en el módulo ejecutado – Hubro
¿Qué es 's' en' inspeccionar.getmodule (s [1] [0]) .__ nombre__'? –