擅长:python、mysql、java
<pre><code>#!/usr/bin/env python
import inspect
import os
import sys
def get_script_dir(follow_symlinks=True):
if getattr(sys, 'frozen', False): # py2exe, PyInstaller, cx_Freeze
path = os.path.abspath(sys.executable)
else:
path = inspect.getabsfile(get_script_dir)
if follow_symlinks:
path = os.path.realpath(path)
return os.path.dirname(path)
print(get_script_dir())
</code></pre>
<p>它对CPython,Jython,Pypy有效。如果使用<code>execfile()</code>执行脚本(这里基于<code>sys.argv[0]</code>和<code>__file__</code>的解决方案将失败),那么它就可以工作。如果脚本在<a href="https://stackoverflow.com/a/5356563/4279">an executable zip file (/an egg)</a>中,它就可以工作。如果脚本是从zip文件“导入”(<code>PYTHONPATH=/path/to/library.zip python -mscript_to_run</code>)的,那么它可以工作;在本例中,它返回存档路径。如果脚本被编译成独立的可执行文件(<code>sys.frozen</code>),它就可以工作。它适用于符号链接(<code>realpath</code>消除符号链接)。它在交互式解释器中工作;在本例中,它返回当前工作目录。</p>