代码之家  ›  专栏  ›  技术社区  ›  bogdan

如何正确确定当前脚本目录?

  •  197
  • bogdan  · 技术社区  · 14 年前

    我发现,由于调用Python代码的方法很多,很难找到一个好的解决方案。

    以下是一些问题:

    • __file__ exec , execfile
    • __module__ 仅在模块中定义

    • ./myfile.py
    • python myfile.py
    • ./somedir/myfile.py
    • python somedir/myfile.py
    • execfile('myfile.py') (来自另一个脚本,可以位于另一个目录中,也可以具有另一个当前目录。

    我知道没有完美的解决方案,但我正在寻找解决大多数情况的最佳方法。

    os.path.dirname(os.path.abspath(__file__)) 但是如果你用另一个脚本来执行脚本,这就不起作用了 exec()

    警告

    13 回复  |  直到 4 年前
        1
  •  1
  •   Simon Streicher    4 年前
    os.path.dirname(os.path.abspath(__file__))
    

    确实是你能得到的最好的。

    执行脚本时使用 exec / execfile __file__ globals

    没有其他方法可以在执行代码中获取文件名:正如您所注意到的,CWD可能位于完全不同的位置。

        2
  •  0
  •   Soap    4 年前

    execfile(...) ,您可以使用 inspect 模块来推断文件名(包括路径)。据我所知,这将适用于您列出的所有案例:

    filename = inspect.getframeinfo(inspect.currentframe()).filename
    path = os.path.dirname(os.path.abspath(filename))