は何か違いがありますスクリプトの名前。違い[0]
違いがなければ、なぜ__file__
がほぼすべての場所で使用されているのですが、私はこれまでにsys.argv[0]
が使用されているのを見たことがありません。
は何か違いがありますスクリプトの名前。違い[0]
違いがなければ、なぜ__file__
がほぼすべての場所で使用されているのですが、私はこれまでにsys.argv[0]
が使用されているのを見たことがありません。
__file__
は、モジュール内にある場合、またはを呼び出すのではなく、execfile()
を使用してスクリプトを開始する場合、メインスクリプトと異なる場合があります。 __file__
は一般的にあなたのより安全な賭けです。
あなたがあなたのpython programmの "メイン"スクリプトにある場合は、同じです。他のファイルをインポートすると、__file__
にはそのファイルへのパスが含まれますが、sys.argvには同じ値が保持されます。
実際には、argv [0]は、スクリプト名またはスクリプト+スクリプト名の完全パス(osによって異なる場合があります)です。
はここスヴェンが言ったようにですhttp://docs.python.org/py3k/library/sys.html#sys.argv
公式ドキュメントのエントリです。
[email protected]: /tmp > cat file.py
import sys
import blub
print __file__
print sys.argv[0]
[email protected]: /tmp > cat blub.py
import sys
print "BLUB: " + __file__
print "BLUB: " + sys.argv[0]
[email protected]: /tmp > python file.py
BLUB: /tmp/blub.pyc
BLUB: file.py
file.py
file.py
プリプロセッサーステップで__file__
がファイル名に置き換えられたと考えました。私は100%確かにそれが実際にはPythonのケースであると確信していませんでしたが、それはC/C++とPerlです。 Pythonでは、__file__
がコンパイルされたPythonファイル(pyc
)に対しても正しくあり、そのファイルの内容にファイル名のトレースがないように見えるため、これは異なる場合があります。
ルードウィッヒ:もう少し実験をするべきでしょう。 'empty.py'という名前の空のファイルを作成します。 Pythonのインタラクティブなプロンプトで、次の行を入力します: 'import empty; print(空き.__ファイル_);リロード(空)。 print(empty .__ file __) '...あなたの答えを編集します。 –
あなたが正しいと思う - 私は私の答えを更新しました。ありがとう。 – Lumi
ルートヴィヒ:事実: '__file__'はモジュールの属性であり、モジュールがロードされると自動的に作成されます。 CPythonにはプリプロセッサのステップはありません。 –
それはそれを説明します。 – user225312
あなたのスクリプトが '-m'スイッチで実行された場合、sys.argv [0]はファイル名ではなくモジュール名であるかもしれません。バンドルされた実行を使用している場合はディレクトリまたはzipファイル名です。 – ncoghlan
\ __ file \ __は非公開で、直接照会されないはずですか? – Tiago