Find path to currently running file

后端 未结 8 1866
礼貌的吻别
礼貌的吻别 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 01:45

    The running file is always __file__.

    Here's a demo script, named identify.py

    print __file__
    

    Here's the results

    MacBook-5:Projects slott$ python StackOverflow/identify.py 
    StackOverflow/identify.py
    MacBook-5:Projects slott$ cd StackOverflow/
    MacBook-5:StackOverflow slott$ python identify.py 
    identify.py
    
    0 讨论(0)
  • 2020-12-01 01:51

    I would suggest

    import os, sys
    print os.path.split(os.path.abspath(os.path.realpath(sys.argv[0])))[0]
    

    This way you can safely create symbolic links to the script executable and it will still find the correct directory.

    0 讨论(0)
  • 2020-12-01 01:54
    import sys, os
    
    file = sys.argv[0]
    pathname = os.path.dirname(file)
    print 'running from %s' % os.path.abspath(pathname)
    print 'file is %s' % file
    

    Check os.getcwd() (docs)

    0 讨论(0)
  • 2020-12-01 02:01

    The directory of the script which python is executing is added to sys.path This is actually an array (list) which contains other paths. The first element contains the full path where the script is located (for windows).

    Therefore, for windows, one can use:

    import sys
    path = sys.path[0]
    print(path)
    

    Others have suggested using sys.argv[0] which works in a very similar way and is complete.

    import sys
    path = os.path.dirname(sys.argv[0])
    print(path)
    

    Note that sys.argv[0] contains the full working directory (path) + filename whereas sys.path[0] is the current working directory without the filename.

    I have tested sys.path[0] on windows and it works. I have not tested on other operating systems outside of windows, so somebody may wish to comment on this.

    0 讨论(0)
  • 2020-12-01 02:02

    Aside from the aforementioned sys.argv[0], it is also possible to use the __main__:

    import __main__
    print(__main__.__file__)
    

    Beware, however, this is only useful in very rare circumstances; and it always creates an import loop, meaning that the __main__ will not be fully executed at that moment.

    0 讨论(0)
  • 2020-12-01 02:03

    The script name will (always?) be the first index of sys.argv:

    import sys
    print sys.argv[0]
    

    An even easier way to find the path of your running script:

    os.path.dirname(sys.argv[0])
    
    0 讨论(0)
提交回复
热议问题