33

私のアプリケーションの詳細なデバッグメッセージには、役立つプレフィックスを返す関数を使用しています。次の例を考えてみましょう。

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()

これは以下を出力します:

test-> awesome_function_name:ここで素晴らしいことをやっています

私の問題は次のとおりです。たとえば「myproject.utilities.input」などのモジュールがパッケージに含まれている場合、返されるモジュール名はget_verbose_prefix「myproject.utilities.input」ではなく「input」のままです。これにより、異なるサブモジュールに複数の「入力」モジュールがすべて一緒に機能する可能性がある場合、大規模なプロジェクトでのプレフィックスの有用性が大幅に低下します。

だから私の質問は: Pythonのパッケージ内の完全なモジュール名を取得する簡単な方法はありますか?get_verbose_prefixモジュールの親ディレクトリにある「__init__。py」ファイルをチェックしてフルネームを推定するように関数を拡張することを計画していますが、最初に、より簡単な方法があるかどうかを知りたいと思います。

4

3 に答える 3

43

__name__モジュールのフルネームが常に含まれます。__main__(もちろん、メイン以外)。

于 2012-07-28T22:18:24.287 に答える
8

__name__モジュールの属性を使用してみてください。

于 2012-07-28T22:17:33.663 に答える