1. ホーム
  2. python

[解決済み] Pythonで関数を呼び出しているモジュールの__name__を取得する

2022-09-08 06:29:34

質問

仮に myapp/foo.py が含まれているとします。

def info(msg):
    caller_name = ????
    print '[%s] %s' % (caller_name, msg)

そして myapp/bar.py が含まれます。

import foo
foo.info('Hello') # => [myapp.bar] Hello

私は caller_name に設定する。 __name__ 属性に設定する必要があります。これはどのようにしたらできるのでしょうか?

どのように解決するのですか?

inspect モジュールを確認してください。

inspect.stack() はスタック情報を返します。

関数の内部で inspect.stack()[1] は呼び出し元のスタックを返します。 そこから、呼び出し元の関数名、モジュールなどの詳細な情報を得ることができます。

詳しくはドキュメントをご覧ください。

http://docs.python.org/library/inspect.html

また、Doug Hellmannは彼のPyMOTWシリーズでinspectモジュールの素晴らしい記事を書いています。

http://pymotw.com/2/inspect/index.html#module-inspect

編集:以下は、あなたが望むことを行ういくつかのコードです、私は思います。

import inspect 

def info(msg):
    frm = inspect.stack()[1]
    mod = inspect.getmodule(frm[0])
    print '[%s] %s' % (mod.__name__, msg)