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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

在python中确定当前脚本目录的最佳方法是什么?

我发现两种调用python代码的方法很多,很难找到一个好的解决方案。

以下是一些问题:

  • __file__如果脚本是用execexecfile
  • __module__仅在模块中定义。

用例:

  • ./myfile.py
  • python myfile.py
  • ./somedir/myfile.py
  • python somedir/myfile.py
  • execfile('myfile.py')

从另一个脚本中,该脚本可以位于另一个目录中,并且可以具有另一个当前目录。

我知道没有完美的解决方案,因为在某些情况下,我正在寻找解决大多数案例的最佳方法。

最常用的方法是os.path.dirname(os.path.abspath(__file__))但是,如果从另一个exec()

警告

任何使用当前目录的解决方案都将失败,这可能根据调用脚本的方式不同,或者在运行的脚本中进行更改。

提问于
用户回答回答于

如果真的想讨论脚本被调用的情况,请通过execfile(...),可以使用inspect模块来推导文件名(包括路径)。据我所知,这将适用于你列出的所有案件:

filename = inspect.getframeinfo(inspect.currentframe()).filename
path = os.path.dirname(os.path.abspath(filename))
用户回答回答于
os.path.dirname(os.path.abspath(__file__))

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

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

扫码关注云+社区