6

where引数が渡されずに実行された場所を知ることができる関数をどのように定義すればよいですか? ~/app/ 内のすべてのファイル

a.py:

def where():
    return 'the file name where the function was executed'

b.py:

from a import where
if __name__ == '__main__':
    print where() # I want where() to return '~/app/b.py' like __file__ in b.py

c.py:

from a import where
if __name__ == '__main__':
    print where() # I want where() to return '~/app/c.py' like __file__ in c.py
4

4 に答える 4

3

使用できますtraceback.extract_stack

import traceback
def where():
    return traceback.extract_stack()[-2][0]
于 2013-04-30T17:48:21.827 に答える
1
import sys

if __name__ == '__main__':
    print sys.argv[0]

sys.argv[0] は、引数が渡されなくても、常に実行中のファイルの名前/パスです

于 2013-04-30T17:47:09.957 に答える
0

これに基づいて...

print where() # I want where() to return '~/app/b.py' like __file__ in b.py

...それは、実行しているスクリプトの修飾パスが必要なように聞こえます。

その場合、試してみてください...

import sys
import os

if __name__ == '__main__':
    print os.path.realpath(os.path.join(os.getcwd(), os.path.expanduser(__file__)))

を使用realpath()すると、シンボリック リンクからスクリプトを実行している場合に対処できます。

于 2013-04-30T17:58:48.837 に答える