Как вы получаете имя вызывающего модуля в виде строки, используя inspect в Python (я продолжаю получать объект модуля) - PullRequest
0 голосов
/ 31 мая 2011

Я пытаюсь получить имя вызывающего модуля с помощью inspect. Когда я возвращаю то, что должно быть строкой модуля, я получаю это:

<module 'mymod.wrapper' from '/usr/local/lib/python2

Я посмотрел на документы и ничего не понял, в чем причина этого (я устал, поэтому, возможно, пропустил это).

Вот класс

import inspect


class Wrapper():


    def getView(self, view, database=False):

        module = self._getDatabase()
        print(module)

    def _getDatabase(self):

        # Get calling module
        frm = inspect.stack()[1]
        modWhole = str(inspect.getmodule(frm[0]))
        modSplit = modWhole.split('.')
        mod = modSplit[0] + '.' + modSplit[1]
        return mod

Кроме того, любые советы о том, как решить и предотвратить эту проблему в будущем, очень ценятся. Спасибо.

Ответы [ 2 ]

4 голосов
/ 31 мая 2011

inspect.getmodule() возвращает сам объект модуля, а не его имя.

Попробуйте заменить

str(inspect.getmodule(frm[0]))

с

inspect.getmodule(frm[0]).__name__

Кроме того, помните, что inspect.getmodule() может вернуть None.

1 голос
/ 31 мая 2011

Вы можете использовать атрибут __name__:

>>> import xml
>>> xml.__name__
'xml'
>>> m = __import__('xml')
<module 'xml' from '/usr/lib/python2.7/xml/__init__.pyc'>
>>> m.__name__
'xml'
...