3

__file__のように、プログラムに関連付けられたデータへのパスを提供するために組み込みグローバルに依存するプログラムがありpath_to_stuff = os.path.join(os.path.dirname(__file__),'stuff')ます。問題は、これを で実行するとpython -m cProfile myprog、 の値が__file__パスではmyprogなく (どうやら) cProfile モジュールへのパスになることです。

マニュアルを読み、ここで検索しましたが、これについては何もわかりません。(a) cProfile をそのままにしておく__file__か、(b) 実行時に cProfile で実行していることを認識して、この特別なケースでリテラル文字列でパスを初期化できるようにする方法はありますか?

編集:または、(c)、常にprogram.pyのすぐ隣にあるディレクトリを見つけるより良い方法はありますか?

4

2 に答える 2

0

(b) やりやすいようです。program.py で、 の値を確認します__name__。プログラムを直接実行している場合、 の値は__name__になります"__main__"。代わりに、cProfile で実行している場合、値は異なります。

編集:あなたの問題を再現できません。cProfileを試してみると__name__、値も値も変わらないようです。__file__呼び出して、スクリプトでプロファイラーを実行することもできますcProfile.run()

于 2012-03-23T02:48:55.300 に答える
0

それでも問題が解決しない場合は、解決策を見つけました。

path_to_stuff = os.path.join(path.dirname(path.realpath(sys.argv[0])), 'stuff')
于 2014-01-23T09:56:39.400 に答える