2016-04-07 11 views
0

私は奇妙な問題を扱っています。今私はFedoraの23 OSを持っている私のラップトップ上でこのコードを実行すると、出力がある異なるLinuxディストリビューションのpythonシステム属性 "__file__"の不一致

print(__file__) 
print("***" + os.path.dirname(__file__) + "###") 

のUbuntu 15.10で同じコード実行し
/home/.../ExperimentalSystem/BullshitSetupGenerator.py 
***/home/.../ExperimentalSystem### 

をこの単純なコードを考えてみましょう
BullshitSetupGenerator_delete_me.py 
***### 

誰でも私の理由を説明できますか?何か不足していますか?

+0

dirname関数に矛盾がありません。矛盾は '__file__'にあります – wim

+0

' dirname'や '__file__'と矛盾していますか?私の推測は後者だろう。両方の場所で同じ相対パスでコードを実行していますか?最後に、一貫した振る舞いを得るために、 'os.path.dirname(os.path.abspath(__ file __))'を使用できると思います。 – mgilson

+0

これは__file__、trueです。 –

答えて

2

あなたはおそらく、純粋に__file__属性に依存しているが、あなたは、あなたが完全なパスabspathを持っていることを確認したくない:

os.path.dirname(os.path.abspath(__file__)) 
3

__file__が、それはどのようなファイル告げるのPythonに与えられた引数で定義されていますです。たとえば、Hereというフォルダにいるとします。 python ../Here/here.pyと言うことができ、__file__../Here/here.pyとなります。 python here.pyと同じファイルを実行した場合、__file__here.pyです。 Pythonファイルを絶対パスまたは奇妙な相対パスを使用せずに同じディレクトリで実行すると、そのファイルにはディレクトリが記述されません。つまり、os.dirname(__file__)は空白になります。必要に応じて、os.path.abspath()で絶対パスを取得できます。

関連する問題