1

__file__コードを含むファイル名が含まれていることは知っていますが、関数を呼び出しているスクリプト/ファイルの名前を取得する方法はありますか?

次の名前のファイルがある場合filenametest_b.py

def printFilename():
    print(__file__)

そして、私は関数をインポートしますfilenametest_a.py

from filenametest_b import *

printFilename()

私は得る:

C:\Users\a150495>python filenametest_a.py
C:\Users\a150495\filenametest_b.py

bファイルの名前を印刷するためにファイルでできることはありaますか?

4

3 に答える 3

4

印刷sys.argv[0]してスクリプトファイル名を取得できます。

sys._getframe()呼び出し元のファイル名を取得するには、関数を使用して呼び出し元のフレームを取得する必要があります。次に、そこからファイル名を取得できます。

import inspect, sys

print inspect.getsourcefile(sys, sys._getframe(1))
于 2012-12-20T22:23:18.663 に答える
0

少し早すぎて、解決したと思います。

inspect私はモジュールを見て回っていました:

filenametest_b.pyこれをファイルに追加しました:

def printCaller():
    frame,filename,line_number,function_name,lines,index=\
        inspect.getouterframes(inspect.currentframe())[1]
    print(frame,filename,line_number,function_name,lines,index)

これはこれを与えます:

C:\Users\a150495\filenametest_b.py
(<frame object at 0x000000000231D608>, 'filenametest_a.py', 5, '<module>', ['printCaller()\n'], 0)

したがって、これは機能するはずです。

于 2012-12-20T22:25:39.850 に答える
0
def printFilename():
    import traceback 
    print traceback.extract_stack()[-2][0] 
于 2012-12-20T22:30:19.957 に答える