Find path to currently running file

后端 未结 8 1867
礼貌的吻别
礼貌的吻别 2020-12-01 01:35

How can I find the full path to the currently running Python script? That is to say, what do I have to do to achieve this:

$ pwd
/tmp
$ python baz.py
running         


        
相关标签:
8条回答
  • 2020-12-01 02:07

    __file__ is NOT what you are looking for. Don't use accidental side-effects

    sys.argv[0] is always the path to the script (if in fact a script has been invoked) -- see http://docs.python.org/library/sys.html#sys.argv

    __file__ is the path of the currently executing file (script or module). This is accidentally the same as the script if it is accessed from the script! If you want to put useful things like locating resource files relative to the script location into a library, then you must use sys.argv[0].

    Example:

    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'
    
    0 讨论(0)
  • 2020-12-01 02:10

    This will print the directory in which the script lives (as opposed to the working directory):

    import os
    dirname, filename = os.path.split(os.path.abspath(__file__))
    print "running from", dirname
    print "file is", filename
    

    Here's how it behaves, when I put it in c:\src:

    > cd c:\src
    > python so-where.py
    running from C:\src
    file is so-where.py
    
    > cd c:\
    > python src\so-where.py
    running from C:\src
    file is so-where.py
    
    0 讨论(0)
提交回复
热议问题