1

現在のモジュールのパスが必要な場合は、__file__.

ここで、それを返す関数が必要だとしましょう。私はできません:

def get_path():
    return __file__

関数が宣言されているモジュールのパスを返すためです。

関数がモジュールのルートではなく、ネストの任意のレベルで呼び出された場合でも、機能する必要があります。

4

3 に答える 3

2

これは私がそれを行う方法です:

import sys

def get_path():
    namespace = sys._getframe(1).f_globals  # caller's globals
    return namespace.get('__file__')
于 2012-10-30T15:16:32.320 に答える
1

globalsその場合、dictから取得します。

def get_path():
    return globals()['__file__']

コメントに応じて編集: 次のファイルが与えられた場合:

# a.py
def get_path():
    return 'Path from a.py: ' + globals()['__file__']

# b.py
import a

def get_path():
    return 'Path from b.py: ' + globals()['__file__']

print get_path()
print a.get_path()

これを実行すると、次の出力が得られます。

C:\workspace>python b.py
Path from b.py: b.py
Path from a.py: C:\workspace\a.py

絶対パスと相対パスが異なることに加えて(簡潔にするために、それは省略します)、私には良さそうです。

于 2012-10-30T10:38:24.673 に答える
0

inspect モジュールでそれを行う方法を見つけました。私はこの解決策で問題ありませんが、誰かがスタックトレース全体をダンプせずにそれを行う方法を見つけた場合、それはよりクリーンになり、彼の答えを感謝して受け入れます:

def get_path():
    frame, filename, line_number, function_name, lines, index =\
        inspect.getouterframes(inspect.currentframe())[1]
    return filename
于 2012-10-30T11:41:58.460 に答える