一尘不染

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

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()

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


阅读 438

收藏
2020-02-14

共1个答案

一尘不染

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

确实是你将获得的最好的。

exec/ 执行脚本是不寻常的execfile。通常,你应该使用模块基础结构来加载脚本。如果必须使用这些方法,我建议设置__file__globals传递给脚本,以便它可以读取该文件名。

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

2020-02-14