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

我想看看在 Python 中确定当前脚本目录的最佳方法是什么。

我发现,由于调用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 从另一个执行脚本,这真的不起作用().

警告

任何使用当前目录的解决方案都会失败,这可能会根据调用脚本的方式而有所不同,也可以在正在运行的脚本中进行更改。

最佳答案

os.path.dirname(os.path.abspath(__file__))

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

使用 exec/execfile 执行脚本并不常见;通常你应该使用模块基础设施来加载脚本。如果您必须使用这些方法,我建议在您传递给脚本的 globals 中设置 __file__ 以便它可以读取该文件名。

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

https://stackoverflow.com/questions/3718657/

相关文章:

python - 如何判断 tensorflow 是否从 python shell 内部使用 gpu

linux - 如何使用 sudo 将输出重定向到我无权写入的位置?

linux - 如何在 Linux/Unix 上永久设置 $PATH

python - Python 中 % 的结果是什么?

linux - 如何在终端中获取当前日期和时间并在终端中为其设置自定义命令?

python - 如何在 Windows 中同时安装 Python 2.x 和 Python 3.x

python - 创建单独变量字典的更简单方法?

python - 解析命令行参数的最佳方法是什么?

python - 连接两个一维 NumPy 数组

linux - "POSIX"是什么意思?