python __file__ argv[0]と


python __file__ argv[0]と
pythonで、現在実行するメインスクリプトを取得する方法はsysの2つです.Argv[0]と_file__.
sys.argv[0]
メイン実行ファイルのパスを取得する最善の方法はsysである.argv[0]は、相対的なパスである可能性がありますので、abspathを取るのは保険の方法です.
import os,sys
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
print "running from", dirname
print "file is", filename

__file__
__file__ モジュールが存在する経路を取得するために用いるものであり、スクリプトtestなどの相対的な経路を得ることができる.pyへの書き込み:
#!/usr/bin/env pythonprint __file__
相対パス./test.pyが実行すると、印刷は相対パスであり、が得られる.
絶対パスで実行すると絶対パスが得られます.
ユーザディレクトリ別に実行(~/practice/test.py)すると、絶対パス(~が展開)が得られる.
絶対経路を得るためにはosが必要ですpath.realpath(__file__).
Pythonコンソールの下でprint__を直接使用file__名前'_を引き起こすfile__’ is not definedエラーです.この場合、スクリプトの下で実行されないため、自然に__はありません.file__を選択します.
__file__argv[0]との相違
プライマリ実行ファイルでは、両者に差はありませんが、異なるファイルでは異なります.次の例を示します.
C:\junk\so>type \junk\so\scriptpath\script1.py
import sys, os
print "script: sys.argv[0] is", repr(sys.argv[0])
print "script: __file__ is", repr(__file__)
print "script: cwd is", repr(os.getcwd())
import whereutils
whereutils.show_where()
 
C:\junk\so>type \python26\lib\site-packages\whereutils.py
import sys, os
def show_where():
    print "show_where: sys.argv[0] is", repr(sys.argv[0])
    print "show_where: __file__ is", repr(__file__)
    print "show_where: cwd is", repr(os.getcwd())
 
C:\junk\so>\python26\python scriptpath\script1.py
script: sys.argv[0] is 'scriptpath\\script1.py'
script: __file__ is 'scriptpath\\script1.py'
script: cwd is 'C:\\junk\\so'
show_where: sys.argv[0] is 'scriptpath\\script1.py'
show_where: __file__ is 'C:\\python26\\lib\\site-packages\\whereutils.pyc'
show_where: cwd is 'C:\\junk\\so'

だから一般的にargv[0]はもっと信頼できるようにします.