2016-10-20 3 views
1

ファイルapp.pyは、module.pyをインポートしています。私はapp.pyのパスを見つける必要があります:/home/user/app/app.py、同じフォルダでうまく動作しますが、app.pyを別のフォルダから呼び出すと、現在のディレクトリは/home/userです。app.pyのディレクトリではなく、現在のディレクトリを取得します。モジュールはどのようにしてPythonでファイルをインポートしているファイルのパスを取得できますか?

これはmodule.pyの内容です。

os.getcwd() < - これが私の現用パス

os.path.dirname(__file__) <を返します - これは、このための最善のアプローチは何モジュールパス

を返しますか?私はちょっと固まっていて、Googleではそれについて何も見つかりませんでした。

+1

はあなただけしたくない: 'os.path.dirname(os.path.abspath(__ファイル__)' – c4urself

+0

OS?。 path.dirname(os.path.abspath(__ file__)< - これは私にモジュールパスを与えます、モジュールを呼び出すファイルのパスが必要です! – codesardine

+0

これはmodule.py [os.pathの中にあることを忘れています。 dirname(os.path.abspath(__ file__)) – codesardine

答えて

0

インポートするモジュールに次のコード行を使用します。

Module.py

import inspect 

# Return the frame object for the caller's stack frame. 
frame = inspect.currentframe() 

# Get calling rame from list of all call frames. 
calling_frame = inspect.getouterframes(frame)[1][0] 

#Prints a traceback tuple. 
print inspect.getframeinfo(calling_frame) 

また、あなたが試みることができるもう一つのハックがあります。私は、生産コードのためではなく、そのちょうど楽しみのためにそれを示唆しています:):

1. Generate the exception in your module. 
2. Catch it and find the Traceback. 
3. Manipulate the Traceback according to you requirement. 
+0

タンクですが、これは正しいパスを出力します。 path.dirname(os.path.abspath(sys.argv [0])) – codesardine

+0

これは、実行しているプログラムのパスを必要とする場合にのみ機能します。私が与えた解決策はまれなものです。それが役に立つと思ったら、回答としてマークしてください。 – Shasha99

+0

ilのみプログラムのパスが必要です。@ c4urselfがコメントの代わりに私に答えを出さない限り – codesardine

関連する問題