あなたのような2つの機能を持っている場合:呼び出し元関数名をPythonの別の関数の中に入れていますか?
def A
def B
とAは次のようにBが、あなたは、Bの内側にBを呼び出している誰が取得することができます呼び出します:あなたが呼び出しを取得するためにinspectモジュールを使用することができます
def A() :
B()
def B() :
this.caller.name
あなたのような2つの機能を持っている場合:呼び出し元関数名をPythonの別の関数の中に入れていますか?
def A
def B
とAは次のようにBが、あなたは、Bの内側にBを呼び出している誰が取得することができます呼び出します:あなたが呼び出しを取得するためにinspectモジュールを使用することができます
def A() :
B()
def B() :
this.caller.name
スタック。フレームレコードのリストを返します。各レコードの3番目の要素は呼び出し元の名前です。あなたが欲しいのはこれです:
>>> import inspect
>>> def f():
... print inspect.stack()[1][3]
...
>>> def g():
... f()
...
>>> g()
g
もちろん、特定のインデックスにアクセスしようとする前に十分なフレームレコードが存在することを確認することをお勧めします。
python 3.4では、少なくともこれは動作しません、彼らはタプルの順序を変更しました。名前付きタプルが使用されているので、inspect.stack()[1] .filenameを使用することをお勧めします。 – timeyyy
次の例のように:
>>> def foo():
... global x
... x = sys._getframe(1)
...
>>> def y(): foo()
...
>>> y()
>>> x.f_code.co_name
'y'
>>>
重要な注意:それは(ちょっと、それはアンダースコアで始まる)_getframe
メソッド名から明らかだとして、それは1つがむやみに頼るべきであるAPIメソッドではありません。 BaseConfig()内
[sys._getframe](http://docs.python.org/library/sys.html#sys._getframe)is is 「Pythonのすべての実装では保証されていません」 - これは重要なことだと思います。 – RWS
@RWS、ありがとうございます。 –
ユーザーロギングモジュールとは、%(ファイル名)を指定することができますsオプション
import logging
logging.basicConfig(filename='/tmp/test.log', level=logging.DEBUG, format='%(asctime)s | %(levelname)s | %(funcName)s |%(message)s')
def A():
logging.info('info')
あなたは誤って '%(filename)sオプション'と言っています。あなたのコード例には次のようなものが必要です: '%(funcName)s' :) –
sys
を使用して二つの方法、およびinspect
モジュールがあります。
inspect.stack()[1][3]
stack()
フォームは読みにくくし、実装依存であることがsys._getframe()
を呼び出しているので、inspect.py
からの抽出物を参照してください。これが私のため
def stack(context=1):
"""Return a list of records for the stack above the caller's frame."""
return getouterframes(sys._getframe(1), context)
作品! :D
>>> def a():
... import sys
... print sys._getframe(1).f_code.co_name
...
>>> def b():
... a()
...
...
>>> b()
b
>>>
ソースがあります。なぜあなたはそのようなことが必要でしょうか? –
実際のデバッガがないサードパーティ製のアプリケーションのPythonインタプリタでコードをデバッグしているためです。 –
[Python:呼び出されたメソッドで呼び出し元のメソッド名を取得する方法は?](http://stackoverflow.com/questions/2654113/python-how-to-get-the-callers-method-name-in -the-called-method) – bernie